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)

마무리

비트 시프트 연산자는 속도가 빠르고 메모리도 적게 사용해서, 임베디드나 시스템 프로그래밍에서도 자주 사용됩니다. 처음엔 어렵게 느껴질 수 있지만, 비트를 그림처럼 생각하면 금방 익숙해질 수 있어요.