C 언어 비트 연산

IT 위키

C 언어 비트 연산(Bitwise Operations in C, 비트演算)은 정수형 데이터를 이진수 단위로 직접 조작할 수 있도록 해주는 연산으로, 하드웨어 제어, 암호화, 최적화된 수치 계산 등에서 자주 사용된다.

1 개요[편집 | 원본 편집]

비트 연산자는 피연산자의 각 비트를 기준으로 연산을 수행하며, 정수형 변수에만 적용된다. 비트 연산은 빠른 속도와 효율적인 메모리 사용을 가능하게 하여 시스템 프로그래밍에서 널리 사용된다.

2 주요 비트 연산자[편집 | 원본 편집]

  • & (AND): 두 비트가 모두 1이면 1
  • | (OR): 두 비트 중 하나라도 1이면 1
  • ^ (XOR): 두 비트가 다르면 1
  • ~ (NOT): 비트를 반전 (1은 0, 0은 1)
  • << (왼쪽 시프트): 비트를 왼쪽으로 이동 (2ⁿ배)
  • >> (오른쪽 시프트): 비트를 오른쪽으로 이동 (2ⁿ 나눗셈)

3 예제[편집 | 원본 편집]

int a = 5;        // 00000101
int b = 3;        // 00000011

int and = a & b;  // 00000001 → 1
int or = a | b;   // 00000111 → 7
int xor = a ^ b;  // 00000110 → 6
int not = ~a;     // 11111010 → -6 (2의 보수 표현 기준)
int shl = a << 1; // 00001010 → 10
int shr = a >> 1; // 00000010 → 2

4 시프트 연산 설명[편집 | 원본 편집]

  • x << n: x를 왼쪽으로 n비트 이동 → x * (2ⁿ)
  • x >> n: x를 오른쪽으로 n비트 이동 → x / (2ⁿ)
  • 시프트 연산은 정수 곱셈이나 나눗셈보다 빠르기 때문에 최적화에 사용됨
  • 음수를 시프트할 경우, 구현체에 따라 부호 비트가 유지될 수 있음

5 활용 예[편집 | 원본 편집]

  • 특정 비트 검사 및 설정
  • 플래그 관리 및 상태 저장
  • 이진 마스크(Bitmask) 사용
  • 하드웨어 레지스터 조작
// 비트 마스크 예
#define FLAG_READ  0x01  // 00000001
#define FLAG_WRITE 0x02  // 00000010

unsigned char flags = 0;
flags |= FLAG_READ;            // READ 플래그 설정
if (flags & FLAG_READ) {...}   // READ 플래그 확인
flags &= ~FLAG_READ;           // READ 플래그 해제

6 주의 사항[편집 | 원본 편집]

  • 부호 있는 정수의 시프트 연산은 구현체(컴파일러)마다 다를 수 있음
  • 비트를 직접 다룰 경우 연산 순서와 우선순위를 명확히 이해해야 함
  • 실수형 데이터에는 비트 연산을 사용할 수 없음

7 관련 키워드[편집 | 원본 편집]

  • 비트 마스크
  • 시프트 연산
  • 이진수
  • 플래그 연산
  • 하드웨어 제어

8 같이 보기[편집 | 원본 편집]

9 참고 문헌[편집 | 원본 편집]

  • Brian W. Kernighan, Dennis M. Ritchie, The C Programming Language, Prentice Hall, 1988.
  • 한동윤, 명품 C 언어 프로젝트, 생능출판사, 2020.

10 각주[편집 | 원본 편집]