C언어 대입 연산자 종류 및 산술 연산자와 비교 예제

C언어 대입 연산자는 우변의 값을 좌변에 대입시켜서 좌변의 값을 갱신합니다. x += y 연산은 x = x + y 와 동일합니다. x *= y 연산은 x = x * y 와 동일합니다. x /= y 연산은 x = x / y 와 동일합니다.

C언어 대입 연산자

C언어 대입 연산자의 종류에는 =, +=, -=, *=, /=, %= 등이 있습니다.

연산자 예제 정답
= x = y x = y
+= x += y x = x + y
-= x -= y x = x - y
*= x =* y x = x * y
/= x /= y x = x / y
%= x %= y x = x % y

x += y

대입 연산자는 등호 기호 = 를 중심으로 우변의 값을 좌변에 대입합니다. x += y 수식은 좌변의 x 값이 우변의 +y 만큼 증가함을 표현합니다. 따라서 x = x + y 가 됩니다.

#include<stdio.h>
void main() {
	int x = 2;
	int y = 3;

	printf("%d\n", x += y); //현재 x = 2이고, x = x + y 이므로 x = 5가 되었습니다.
	printf("%d\n", x += y); //현재 x = 5이고, x = x + y 이므로 x = 8이 되었습니다.
	printf("%d\n", x += y); //현재 x = 8이고, x = x + y 이므로 x = 11이 되었습니다.
}

결과

5
8
11

x += yx + y의 차이점은 x + y는 변수 x를 증가시키지 않습니다.

#include<stdio.h>
void main() {
	int x = 2;
	int y = 3;

	printf("%d\n", x + y); //현재 x = 2이고, y = 3 이므로 x + y = 5입니다.
	printf("%d\n", x + y); //현재 x = 2이고, y = 3 이므로 x + y = 5입니다.
	printf("%d\n", x + y); //현재 x = 2이고, y = 3 이므로 x + y = 5입니다.
}

결과

5
5
5

x -= y

대입 연산자는 등호 기호 = 를 중심으로 우변의 값을 좌변에 대입합니다. x -= y 수식은 좌변의 x 값이 우변의 -y 만큼 감소함을 표현합니다. 따라서 x = x - y 가 됩니다.

#include<stdio.h>
void main() {
	int x = 20;
	int y = 4;

	printf("%d\n", x -= y); //현재 x = 20 입니다. x = x - y 이므로 x = 16 입니다.
	printf("%d\n", x -= y); //현재 x = 16 입니다. x = x - y 이므로 x = 12 입니다.
	printf("%d\n", x -= y); //현재 x = 12 입니다. x = x - y 이므로 x = 8 입니다.
}

결과

16
12
8

x -= yx - y의 차이점은 x - y는 변수 x를 감소시키지 않습니다.

#include<stdio.h>
void main() {
	int x = 20;
	int y = 4;

	printf("%d\n", x - y); //현재 x = 20이고, y = 4 이므로 x - y = 16입니다.
	printf("%d\n", x - y); //현재 x = 20이고, y = 4 이므로 x - y = 16입니다.
	printf("%d\n", x - y); //현재 x = 20이고, y = 4 이므로 x - y = 16입니다.
}

결과

16
16
16

x *= y

대입 연산자는 등호 기호 = 를 중심으로 우변의 값을 좌변에 대입합니다. x *= y 수식은 좌변의 x 값이 우변의 y 만큼 곱해짐을 표현합니다. 따라서 x = x * y 가 됩니다.

#include<stdio.h>
void main() {
	int x = 1;
	int y = 2;

	printf("%d\n", x *= y); //현재 x = 1 입니다. x = x * y 이므로 x = 2 입니다.
	printf("%d\n", x *= y); //현재 x = 2 입니다. x = x * y 이므로 x = 4 입니다.
	printf("%d\n", x *= y); //현재 x = 4 입니다. x = x * y 이므로 x = 8 입니다.
}

결과

2
4
8

x * yx *= y의 차이점은 x * y는 변수 x에 곱셈이 적용되지 않습니다.

#include<stdio.h>
void main() {
	int x = 1;
	int y = 2;

	printf("%d\n", x * y); //현재 x = 1 입니다. x = x * y 이므로 x = 2 입니다.
	printf("%d\n", x * y); //현재 x = 1 입니다. x = x * y 이므로 x = 2 입니다.
	printf("%d\n", x * y); //현재 x = 1 입니다. x = x * y 이므로 x = 2 입니다.
}

결과

2
2
2

x /= y

대입 연산자는 등호 기호 = 를 중심으로 우변의 값을 좌변에 대입합니다. x /= y 수식은 좌변의 x 값이 우변의 y 만큼 나눠짐을 표현합니다. 따라서 x = x / y 가 됩니다.

#include<stdio.h>
void main() {
	int x = 200;
	int y = 2;

	printf("%d\n", x /= y); //현재 x = 200 입니다. x = x / y 이므로 x = 100 입니다.
	printf("%d\n", x /= y); //현재 x = 100 입니다. x = x / y 이므로 x = 50 입니다.
	printf("%d\n", x /= y); //현재 x = 50 입니다. x = x / y 이므로 x = 25 입니다.
}

결과

100
50
25

x / yx /= y의 차이점은 x / y는 변수 x에 나눗셈이 적용되지 않습니다.

#include<stdio.h>
void main() {
	int x = 200;
	int y = 2;

	printf("%d\n", x / y); //현재 x = 200 입니다. x = x / y 이므로 x = 100 입니다.
	printf("%d\n", x / y); //현재 x = 200 입니다. x = x / y 이므로 x = 100 입니다.
	printf("%d\n", x / y); //현재 x = 200 입니다. x = x / y 이므로 x = 100 입니다.
}

결과

100
100
100

x %= y

대입 연산자는 등호 기호 = 를 중심으로 우변의 값을 좌변에 대입합니다. x %= y 수식은 좌변의 x 값이 우변의 y 값으로 나눈 후 몫을 제외한 나머지로 변환됩니다. 따라서 x = x % y 가 됩니다.

5011로 나눌 경우 몫은 4이고 나머지는 6입니다. 나머지가 6 이므로 변수 x6 으로 변했습니다. 이어서 변수 x6일 때 y = 11로 나눌 경우 몫의 정수값은 0 밖에 없습니다. 따라서 몫 0이고 나머지는 6이됩니다.

#include<stdio.h>
void main() {
	int x = 50;
	int y = 11;

	printf("%d\n", x %= y); //현재 x = 50 입니다. x = (x % y) = (11 * 4 + 6) 에서 나머지는 6이므로 x = 6 입니다.
	printf("%d\n", x %= y); //현재 x = 6 입니다. x = (x % y) = (6 * 0 + 6) 에서 나머지는 6이므로 x = 6입니다.
	printf("%d\n", x %= y); //현재 x = 6 입니다. x = (x % y) = (6 * 0 + 6) 에서 나머지는 6이므로 x = 6입니다.
}

결과

6
6
6

x % yx %= y는 연속적인 연산시 각 식에 대한 연산 결과는 같습니다. 하지만 x 변수의 값은 서로 다릅니다. x %= y의 연속적인 연산은 변수 x가 나머지 6으로 변한 상태입니다. 하지만 x % y의 단순 연산은 변수 x는 계속 고정된 50입니다.

#include<stdio.h>
void main() {
	int x = 50;
	int y = 11;

	printf("%d\n", x % y); //현재 x = 50 입니다. x = (x % y) = (11 * 4 + 6) 에서 나머지는 6이므로 x = 6 입니다.
	printf("%d\n", x % y); //현재 x = 50 입니다. x = (x % y) = (11 * 4 + 6) 에서 나머지는 6이므로 x = 6 입니다.
	printf("%d\n", x % y); //현재 x = 50 입니다. x = (x % y) = (11 * 4 + 6) 에서 나머지는 6이므로 x = 6 입니다.
}

결과

6
6
6

대입 연산자 교차 사용

대입 연산자를 교차 사용시 좌변의 변수값이 계속 변동됨을 유의합니다.

#include<stdio.h>
void main() {
	int x = 2;
	int y = 3;

	printf("%d\n", x = y); // x = 2였지만, x = y = 3 이므로, x = 3 으로 변경됩니다.
	printf("%d\n", x += y); // 현재 x = 3 이고, y = 3 입니다. x += y 는 x = (x + y) 이므로, x = (3 + 3) = 6 입니다.
	printf("%d\n", x -= y); // 현재 x = 6 이고, y = 3 입니다. x -= y 는 x = (x - y) 이므로, x = (6 - 3) = 3 입니다.
	printf("%d\n", x *= y); // 현재 x = 3 이고, y = 3 입니다. x *= y 는 x = (x * y) 이므로, x = (3 * 3) = 9 입니다.
	printf("%d\n", x /= y); // 현재 x = 9 이고, y = 3 입니다. x /= y 는 x = (x / y) 이므로, x = (9 / 3) = 3 입니다.
	printf("%d\n", x %= y); // 현재 x = 3 이고, y = 3 입니다. x %= y 는 x = (x % y) 이므로, x = (3 % 3) = 0 입니다.
}

결과

3
6
3
9
3
0

산술 연산자는 교차 사용시 좌변의 변수값이 달라지지 않습니다.

#include
void main() {
	int x = 2;
	int y = 3;

	printf("%d\n", x = y); // x = 2였지만, x = y = 3 이므로, x = 3 으로 변경됩니다.
	printf("%d\n", x + y); // 현재 x = 3 이고, y = 3 입니다. x + y 는 x = (x + y) 이므로, x = (3 + 3) = 6 입니다.
	printf("%d\n", x - y); // 현재 x = 3 이고, y = 3 입니다. x - y 는 x = (x - y) 이므로, x = (3 - 3) = 0 입니다.
	printf("%d\n", x * y); // 현재 x = 3 이고, y = 3 입니다. x * y 는 x = (x * y) 이므로, x = (3 * 3) = 9 입니다.
	printf("%d\n", x / y); // 현재 x = 9 이고, y = 3 입니다. x / y 는 x = (x / y) 이므로, x = (3 / 3) = 1 입니다.
	printf("%d\n", x % y); // 현재 x = 3 이고, y = 3 입니다. x % y 는 x = (x % y) 이므로, x = (3 % 3) = 0 입니다.
}

결과

3
6
0
9
1
0

대입 연산자의 기호를 중심으로 우변을 좌변에 대입한다는 개념이 공통된 사항입니다.