복합 대입 연산자
복합 대입 연산자란 산술 연산자, 비트 연산자와 대입연산자가 결합된 이항연산자이다.
복합 대입 연산자는 코드를 좀 더 간결하게 표현할 수 있다.
산술 대입 연산자
연산자 | 의미 | 사용 | 동일 표현 | 설명 |
+= | 덧셈 | x += y | x = x + y | x와 y를 더해서 x에 대입 |
-= | 뺄셈 | x -= y | x = x - y | x에서 y를 빼서 x에 대입 |
*= | 곱 | x *= y | x = x * y | x와 y를 곱해서 x에 대입 |
/= | 나누기 (몫) | x /= y | x = x / y | x에서 y를 나누고 몫을 x에 대입 |
%= | 나누기 (나머지) | x %= y | x = x % y | x에서 y를 나누고 나머지를 x에 대입 |
산술연산자에 대한 간략한 설명은 아래 링크에 있다.
[C언어 기초-05] 연산자 (대입, 산술, 증감연산자)
아래 코드는 예시
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
#include <stdio.h>
main() {
int x = 7, y = 2;
printf("x = 7, y = 2\n");
x += y;
printf("x += y -> x : %d\n", x);
x = 7, y = 2;
x -= y;
printf("x -= y -> x : %d\n", x);
x = 7, y = 2;
x *= y;
printf("x *= y -> x : %d\n", x);
x = 7, y = 2;
x /= y;
printf("x /= y -> x : %d\n", x);
x = 7, y = 2;
x %= y;
printf("x %= y -> x : %d\n", x);
}
|
cs |
x는 7로 y는 2로 초기화한다.
7, 11, 15, 19, 23행 수식을 전개한다.
수식을 전개하고 나면 x값이 바뀌게 되므로 10, 14, 18, 22행에서 x 값을 다시 초기화한다.
비트 대입 연산자
산술 대입 연산자랑 의미는 같다. 수식을 전개해서 왼쪽 항에 값을 대입하는 것이다.
연산자 | 의미 | 사용 | 동일 표현 | 설명 |
&= | 비트 곱 | x &= y | x = x & y | x와 y 를 AND 연산하여 x 에 대입 |
|= | 비트 합 | x |= y | x = x | y | x와 y 를 OR연산하여 x 에 대입 |
^= | 배타적 논리합 | x ^= y | x = x ^ y | x와 y 를 XOR 연산하여 x 에 대입 |
<<= | 왼쪽 이동 | x <<= y | x = x << y | x를 y만큼 왼쪽 이동하여 x 에 대입 |
>>= | 오른쪽 이동 | x >>= y | x = x >> y | x를 y만큼 오른쪽 이동하여 x 에 대입 |
[C언어 기초-09] 비트 연산자 논리 연산자 ~, &, |, ^
논리 연산자와 비트 연산자는 위 링크에서 간략히 설명되어 있다.
예시 코드를 보면
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
#include <stdio.h>
main() {
int x = 170; //1010 1010 = 2^1 + 2^3 + 2^5 + 2^7 = 2 + 8 + 32 + 128
int y = 54; //0011 0110 = 2^1 + 2^2 + 2^4 + 2^5 = 2 + 4 + 16 + 32
//논리 연산자
//x 1010 1010
x &= y; //y 0011 0110
printf("x &= y -> x : %d\n", x); //x 0010 0010 //34
//x 0010 0010
x |= y; //y 0011 0110
printf("x |= y -> x : %d\n", x); //x 0011 0110 //54
//x 0011 0110
x ^= y; //y 0011 0110
printf("x ^= y -> x : %d\n", x); //x 0000 0000 //0
//시프트 연산자
x = 3, y = 2;
//x 0000 0011
x <<= y; //x << y :0000 1100
printf("x <<= y -> x : %d\n", x); //x 12
//x 0000 1100
x >>= 3; //x >> 3 :0000 0001
printf("x >>= y -> x : %d\n", x); //x 1
}
|
cs |
4, 6행 : x는 170, y는 54로 초기화했다. 비트 연산자이므로 2진법 비트로 표기해서 풀어보면 이해하기 쉽다.
9행 : AMD 연산을 했는데 서로 대응되는 비트가 둘 다 1이어야 (참이어야) 1로 표기한다.
그렇게 170과 54를 & 연산하여 x는 34가 되었다.
13행 : OR 연산을 하는데 대응되는 비트에서 하나라도 1이면 1로 표기한다. 34인 x와 54인 y를 계산했는데 54로 나와 x는 54가 되었다.
17행 : XOR 연산은 두 비트가 같으면 0 서로 다른 값이면 1인데 x값이 54로 바꼈고 y는 54여서 비트가 전부 같아 0이 나왔다.
시프트 이동 연산자를 설명하기 위해 x는 3, y는 2를 할당했다. x는 비트로 표기하면 되고 y는 시프트 할 값으로 생각하면 된다.
22행 : x를 y만큼 즉 2만큼 비트 이동을 시킨다 그러면 주석처럼 0000 0011에서 0000 1100으로 이동하여 x는 12가 되었다.
26행 : 12가 된 x를 이번엔 3만큼 오른쪽으로 이동시킨다. 그러면 오른쪽으로 밀린 거는 그대로 사라진다. 그래서 x는 1
출력해 보면 결과는 아래처럼 나온다.
'프로그래밍 > c언어 기초공부' 카테고리의 다른 글
[C언어 기초-12] 콤마 연산자(comma operator) (0) | 2024.08.02 |
---|---|
[C언어 기초-11] 조건 연산자(conditional operator) 삼항 연산자 (0) | 2024.08.01 |
[C언어 기초-09] 비트 연산자 논리 연산자 ~, &, |, ^ (0) | 2024.01.25 |
[C언어 기초-08] 비트 연산자 시프트 연산자 (0) | 2024.01.08 |
[C언어 기초-07] 논리 연산자 and, or, not연산자 &&, ||, ! (0) | 2021.08.21 |
댓글