C
C언어 >>와 << 연산자 쉽게 이해하기
꼬맹님
2025. 4. 11. 17:57
C언어를 공부하다 보면 >>와 << 같은 연산자를 볼 수 있는데요. 이 연산자들은 비트 단위로 데이터를 다루는 데 사용됩니다. 바로 비트 시프트 연산자라고 불러요.
1. << (왼쪽 시프트 연산자)
- 뜻: 비트들을 왼쪽으로 이동시킵니다.
- 결과: 비트를 왼쪽으로 이동하면 빈 공간은 0으로 채워지고, 값은 2의 거듭제곱만큼 커집니다.
예제
c
#include <stdio.h>
int main() {
unsigned int a = 5; // 0000 0101 (2진수)
unsigned int result = a << 1; // 왼쪽으로 1칸 이동
printf("a << 1 = %u\n", result); // 출력 결과: 10
return 0;
}
설명:
- 5의 2진수: 0000 0101
- 5 << 1 하면: 0000 1010 → 십진수로 10
- 한 칸 이동할 때마다 ×2 됩니다!
2. >> (오른쪽 시프트 연산자)
- 뜻: 비트들을 오른쪽으로 이동시킵니다.
- 결과: 오른쪽으로 이동하면 값이 2의 거듭제곱만큼 작아집니다.
예제
c
#include <stdio.h>
int main() {
unsigned int a = 20; // 0001 0100 (2진수)
unsigned int result = a >> 2; // 오른쪽으로 2칸 이동
printf("a >> 2 = %u\n", result); // 출력 결과: 5
return 0;
}
설명:
- 20의 2진수: 0001 0100
- 20 >> 2 하면: 0000 0101 → 십진수로 5
- 한 칸 이동할 때마다 ÷2 됩니다!
3. 주의할 점
- 부호가 있는 정수(int)를 >> 하면 부호 비트(맨 앞 비트) 가 따라올 수 있어요. 이걸 산술 시프트라고 합니다.
- 부호가 없는 정수(unsigned int)를 쓰면 0으로 채워져서 깔끔합니다. (그래서 위 예제도 unsigned int를 사용했어요.)
간단 요약
연산자방향효과결과
<< | 왼쪽 | 비트 왼쪽 이동 | 값이 커진다 (×2) |
>> | 오른쪽 | 비트 오른쪽 이동 | 값이 작아진다 (÷2) |
마무리
비트 시프트 연산자는 속도가 빠르고 메모리도 적게 사용해서, 임베디드나 시스템 프로그래밍에서도 자주 사용됩니다. 처음엔 어렵게 느껴질 수 있지만, 비트를 그림처럼 생각하면 금방 익숙해질 수 있어요.