23.3 시프트 연산자 사용하기
C 언어에서 비트의 논리 연산뿐만 아니라 각 자리를 이동시킬 수도 있습니다. 이번에는 비트의 자리를 이동시켜 보겠습니다.
- a << b
- a >> b
bitwise_shift_operator.c
#include <stdio.h> int main() { unsigned char num1 = 3; // 3: 0000 0011 unsigned char num2 = 24; // 24: 0001 1000 printf("%u\n", num1 << 3); // 24: 0001 1000: num1의 비트 값을 왼쪽으로 3번 이동 printf("%u\n", num2 >> 2); // 6: 0000 0110: num2의 비트 값을 오른쪽으로 2번 이동 return 0; }
실행 결과
24 6
시프트 연산자를 사용하여 각 변수의 비트를 지정한 횟수대로 이동하였습니다. 다음은 시프트 연산을 하는 방법이며 << 연산자를 예로 들었습니다.
시프트 연산은 변수 << 이동할 비트 수 또는 변수 >> 이동할 비트 수 형식으로 사용합니다. 즉 지정한 횟수대로 비트를 이동시키며 모자라는 공간은 0으로 채웁니다. 연산자 모양 그대로 <<는 왼쪽, >>는 오른쪽 방향입니다.
num1 << 3은 0000 0011을 왼쪽으로 3번 이동하므로 0001 1000이 되고, 10진수로 24입니다.
0000 0011(3) _________ << 3 0001 1000(24)
num2 >> 2는 0001 1000이 오른쪽으로 2번 이동하므로 0000 0110이 되고, 10진수로 6입니다.
0001 1000(24) _________ >> 2 0000 0110(6)
3 << 3은 3 * 23과 같으므로 24가 되고, 24 >> 2는 24 / 22과 같으므로 6이 됩니다. 즉, 시프트 연산 <<은 2의 거듭제곱을 곱하기, >>은 2의 거듭제곱을 나누기입니다.