[비트 시프트 연산자] 1<<2 = _ 를 아시나요?

seungmi yang·2022년 2월 8일
0

비트 시프트 연산자란 3가지 표현이 있다

 << : 왼쪽으로 이동 👈
 >> : 오른쪽으로 이동 👉
 >>> : unsigned, 오른쪽으로 이동 👉👉

1. '<<' 연산자

int a = 0x00000010;   // 10진수 '16' 을 16진수로 표현
a = a << 2;

a
0000 0000 0000 0000 0000 0000 0001 0000 // 16

a << 2
0000 0000 0000 0000 0000 0000 0100 0000 // 64

1이 왼쪽으로 2칸 이동하고 뒤에 0이 2개 붙었다. 16이 64가 됨.

  • 비트 값들을 왼쪽으로 이동시킨 후에 오른쪽의 빈 공간에는 모두 0 으로 채운다.
  • "A << B"의 연산시 결과 값은 "A*(2의 B제곱)"한 결과와 같다.

2. '>>' 연산자

int a = 2147483647;    // 2^31-1
a = a>>1;
a>>=30;

a
1000 0000 0000 0000 0000 0000 0000 0000 // -2147483648 = -2^31

a = a >> 1
1100 0000 0000 0000 0000 0000 0000 0000 // -1073741824 = -2^30

a>>30
1111 1111 1111 1111 1111 1111 1111 1111 // -1 = -2^0

int x = -8;        // 11111111 11111111 11111111 11111000
int y = x>>2;      // 오른쪽으로 2비트만큼 이동시킴.
int z = x>>3;      // 오른쪽으로 3비트만큼 이동시킴.  

printf("%d\n", y); // 11111111 11111111 11111111 11111110 : -2
printf("%d", z);   // 11111111 11111111 11111111 11111111 : -1

비트 값들을 오른쪽으로 이동시킨 후에 왼쪽의 빈 공간에는 양수는 모두 0 으로, 음수는 모두 1 로 채운다.

3. '>>>' 연산자

a = -2147483648    // -2^31
a >>>= 1;
a >>>= 30;

a
1000 0000 0000 0000 0000 0000 0000 0000 // -2147483648 = -2^31

a >>>= 1
0100 0000 0000 0000 0000 0000 0000 0000 // 1073741824 = 2^30

a >>>= 30
0000 0000 0000 0000 0000 0000 0000 0001 // 1 = 2^0

'>>>' 연산자는 부호를 신경쓰지 않는다.
비트 값들을 오른쪽으로 이동시킨 후에 왼쪽의 빈 공간은 모두 0 으로 채운다.

활용

앞으로 2의 제곱 계산시 시프트 연산을 사용해서 코드 짜는걸로~

profile
개발을 잘하고 싶은 개발자

0개의 댓글