Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C 언어 비트 연산자 완벽 정리: 종류, 예제 코드, 실행 결과 분석


비트 연산자(Bitwise Operator)는 두 변수에 대해 비트(bit) 단위의 연산을 수행하는 데 사용됩니다. C 언어는 정수 데이터를 이진수로 다루면서 각 비트별로 논리 연산이나 시프트 연산을 직접 적용할 수 있기 때문에, 저수준 프로그래밍이나 임베디드 시스템 개발에서 특히 유용하게 활용됩니다.

C 언어의 비트 연산자 종류

연산자연산자 이름
&비트 AND
|비트 OR
^비트 XOR
~비트 보수(Complement)
<<왼쪽 시프트(Shift Left)
>>오른쪽 시프트(Shift Right)

연산자별 동작 원리

  • & (AND) : 대응되는 두 비트가 모두 1일 때만 결과가 1이 됩니다.
  • | (OR) : 대응되는 두 비트 중 하나라도 1이면 결과가 1이 됩니다.
  • ^ (XOR) : 대응되는 두 비트가 서로 다를 때 결과가 1이 됩니다.
  • ~ (보수) : 모든 비트를 반전시킵니다(0은 1로, 1은 0으로). 일반적으로 ~n은 -(n+1)과 같습니다.
  • << (왼쪽 시프트) : 비트를 왼쪽으로 이동하며, n칸 이동하면 값이 2ⁿ배가 되는 효과가 있습니다.
  • >> (오른쪽 시프트) : 비트를 오른쪽으로 이동하며, n칸 이동하면 값이 2ⁿ으로 나뉘는 효과가 있습니다.

예제 코드

다음은 C 언어에서 비트 연산자를 사용하는 예제입니다.

#include <stdio.h>
int main() {
   int x = 10;
   int y = 28;
   int i = 0;
   printf("Bitwise AND : %d\n", x&y);
   printf("Bitwise OR : %d\n", x|y);
   printf("Bitwise XOR : %d\n", x^y);
   printf("Bitwise Complement : %d,%d\n", ~x,~-y);
   for(i;i<2;i++)
   printf("Right shift by %d: %d\n", i, x>>i);
   for(i;i<=3;++i)
   printf("Left shift by %d: %d\n", i, y<<i);
   return 0;
}

실행 결과

Bitwise AND : 8
Bitwise OR : 30
Bitwise XOR : 22
Bitwise Complement : -11,27
Right shift by 0: 10
Right shift by 1: 5
Left shift by 2: 112
Left shift by 3: 224

결과 분석

x = 10은 이진수로 01010, y = 28은 이진수로 11100입니다. 각 연산 결과를 살펴보면 다음과 같습니다.

  • AND : 01010 & 11100 = 01000 → 8
  • OR : 01010 | 11100 = 11110 → 30
  • XOR : 01010 ^ 11100 = 10110 → 22
  • 보수 : ~10 = -(10+1) → -11, ~(-28) = 28-1 → 27
  • 오른쪽 시프트 : 10 >> 1 = 5 (2로 나눈 효과)
  • 왼쪽 시프트 : 28 << 2 = 112, 28 << 3 = 224 (각각 4배, 8배 곱한 효과)

이처럼 비트 연산자는 곱셈·나눗셈을 빠르게 처리하거나 플래그(flag) 관리, 마스킹(masking) 등에 활용할 수 있는 강력한 도구입니다.