티스토리 뷰

C언어

비트연산자 << 와 >> 총정리

박완희버서커 2025. 7. 10. 13:55
반응형
비트연산자 << 와 >> 총정리

비트연산자 <<>> 총정리


비트연산자란?

정의
비트연산자는 정수를 이루는 비트(0과 1) 단위를 대상으로 하는 연산자입니다.
컴퓨터는 숫자를 2진수로 처리하기 때문에, 각 자리의 비트가 켜져(1) 있거나 꺼져(0) 있음을 통해 값을 표현합니다.

예를 들어, 정수 5를 2진수로 쓰면 00000101입니다.
여기서 왼쪽부터 오른쪽까지 각 자리에는 고유한 값이 있습니다.
비트연산은 각 자리의 비트가 1인 경우에만 그 자리에 해당하는 값을 더합니다.
비트가 0인 자리의 값은 더하지 않습니다.



비트 연산자 연산방법

비트값은 자리마다 아래와 같은 고유한 값을 가집니다.

비트값: 1 1 1 1 0
자리값: 16 8 4 2 1

여기서 비트값이 1인 자리를 찾습니다.
위 예제에서는 왼쪽부터 16, 8, 4, 2가 모두 1이므로 더합니다.
16 + 8 + 4 + 2 = 30
마지막 비트는 0이므로 그 자리에 해당하는 1은 더하지 않습니다.

핵심 규칙:

  • 비트가 1인 자리 → 해당 자리값을 더함
  • 비트가 0인 자리 → 해당 자리값은 무시

예시 1

비트값: 1 0 1 0 1
자리값: 16 8 4 2 1
  • 16(비트1) + 4(비트1) + 1(비트1) = 21
  • 여기서 82는 비트가 0이므로 더하지 않습니다.

예시 2

비트값: 0 1 0 1 0
자리값: 16 8 4 2 1
  • 8(비트1) + 2(비트1) = 10
  • 16, 4, 1은 비트가 0이므로 더하지 않습니다.


왼쪽 시프트 연산자

왼쪽 시프트 연산자는 <<로 표기하며, 비트를 왼쪽으로 밀어냅니다.
비트가 왼쪽으로 이동하면서 각 자리값도 2배가 됩니다.
오른쪽 끝에는 항상 0이 채워집니다.

예시 1

원래 비트: 1 1 1 1 0
자리값:     16 8 4 2 1

왼쪽으로 한 칸 밀면:

왼쪽 이동: 1 1 1 0 0
자리값:     32 16 8 4 2

값: 32 + 16 + 8 + 4 = 60
기존 30이 2배가 되어 60이 됩니다.

예시 2

원래 비트: 1 0 1 0 1
자리값:     16 8 4 2 1

왼쪽으로 한 칸 밀면:

왼쪽 이동: 1 0 1 0 0
자리값:     32 16 8 4 2

값: 32 + 8 + 0 = 40



오른쪽 시프트 연산자

오른쪽 시프트 연산자는 >>로 표기하며, 비트를 오른쪽으로 밀어냅니다.
비트가 오른쪽으로 이동하면서 각 자리값도 절반으로 줄어듭니다.
왼쪽 끝에는 0이 채워집니다.

예시 1

원래 비트: 1 1 1 1 0
자리값:     16 8 4 2 1

오른쪽으로 한 칸 밀면:

오른쪽 이동: 0 1 1 1 1
자리값:       8 4 2 1 0

값: 8 + 4 + 2 + 1 = 15
기존 30이 절반이 되어 15가 됩니다.

예시 2

원래 비트: 1 0 1 0 1
자리값:     16 8 4 2 1

오른쪽으로 한 칸 밀면:

오른쪽 이동: 0 1 0 1 0
자리값:       8 4 2 1 0

값: 8 + 2 = 10



<< 2, >> 2 코드 설명

비트를 두 칸씩 이동하는 코드입니다.

코드 예제 1


int x = 5;
int y = x << 2;
printf("%d", y); // 출력: 20

5를 왼쪽으로 두 칸 밀면 5 × 4 = 20
비트값이 두 자리씩 밀려 각 자리값이 4배가 됩니다.

코드 예제 2


int x = 20;
int y = x >> 2;
printf("%d", y); // 출력: 5

20을 오른쪽으로 두 칸 밀면 20 ÷ 4 = 5
비트값이 두 자리씩 밀려 각 자리값이 4분의 1이 됩니다.



결론

  • 비트연산자는 각 자리의 1 비트에 해당하는 값만 계산된다.
  • 왼쪽 시프트는 값을 2배, 4배 등으로 빠르게 만든다.
  • 오른쪽 시프트는 값을 절반, 4분의 1로 빠르게 줄인다.
  • 비트 자리별 값을 이해해야 계산 과정을 명확히 알 수 있다.

요약표

연산자 동작 계산식
x << 1 왼쪽으로 1칸 이동 x × 2
x << n 왼쪽으로 n칸 이동 x × 2ⁿ
x >> 1 오른쪽으로 1칸 이동 x ÷ 2
x >> n 오른쪽으로 n칸 이동 x ÷ 2ⁿ
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/10   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함
반응형