시프트 연산이란?
C 언어의 시프트 연산(shift operation)은 정수 데이터를 비트(bit) 단위로 좌우로 이동시키는 연산입니다. 곱셈과 나눗셈을 매우 빠르게 처리할 수 있어 임베디드 프로그래밍이나 성능 최적화에 널리 활용됩니다. 대표적인 시프트 연산자로는 좌측 시프트(<<)와 우측 시프트(>>)가 있으며, 이와 함께 비트를 반전시키는 보수 연산자(~)도 자주 함께 사용됩니다.
좌측 시프트(<<)
변수의 값을 한 번 좌측 시프트하면 그 값은 2배가 됩니다. 일반적으로 n비트만큼 좌측 시프트하면 원래 값에 2ⁿ을 곱한 결과와 같습니다.
예를 들어 a = 10이라면, a<<1 = 20이 됩니다.

우측 시프트(>>)
변수의 값을 한 번 우측 시프트하면 원래 값의 절반이 됩니다. 마찬가지로 n비트만큼 우측 시프트하면 원래 값을 2ⁿ으로 나눈 결과와 같습니다.
예를 들어 a = 10이라면, a>>1 = 5가 됩니다.

보수 연산(~)
보수 연산자(~)는 수의 모든 비트를 반전시킵니다. 어떤 수 x에 대한 보수는 -(x+1)과 같습니다. 예를 들어 a = 9라면 ~a = -10이 됩니다.
예제 코드
다음은 C 언어로 작성한 시프트 연산 프로그램입니다.
#include <stdio.h>
main() {
int a = 9;
printf("Rightshift of a = %d\n", a >> 1); // 4
printf("Leftshift of a = %d\n", a << 1); // 18
printf("Compliment of a = %d\n", ~a); // -(9+1)
printf("Rightshift by 2 of a = %d\n", a >> 2); // 2
printf("Leftshift by 2 of a = %d\n", a << 2); // 36
}실행 결과
위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.
Rightshift of a = 4 Leftshift of a = 18 Compliment of a = -10 Rightshift by 2 of a = 2 Leftshift by 2 of a = 36
결과 정리
a = 9일 때 각 연산의 결과를 정리하면 다음과 같습니다.
- a >> 1 : 4 (9 ÷ 2)
- a << 1 : 18 (9 × 2)
- ~a : -10 (-(9+1), 비트 반전)
- a >> 2 : 2 (9 ÷ 4)
- a << 2 : 36 (9 × 4)
이처럼 시프트 연산은 2의 거듭제곱 배수 곱셈·나눗셈을 간단하고 빠르게 수행할 수 있는 강력한 도구입니다.