본문 바로가기
프로그래밍/c언어 기초공부

[C언어 기초-10] 복합 대입 연산자 (산술 대입 연산자, 비트 대입 연산자)

by 졸린이 2024. 8. 1.
반응형

복합 대입 연산자

복합 대입 연산자란 산술 연산자, 비트 연산자와 대입연산자가 결합된 이항연산자이다.

복합 대입 연산자는 코드를 좀 더 간결하게 표현할 수 있다.

산술 대입 연산자

연산자 의미 사용 동일 표현 설명
+= 덧셈 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] 비트 연산자 논리 연산자 ~, &, |, ^

[C언어 기초-08] 비트 연산자 시프트 연산자

논리 연산자와 비트 연산자는 위 링크에서 간략히 설명되어 있다.

예시 코드를 보면

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

출력해 보면 결과는 아래처럼 나온다.

반응형

 

반응형

댓글