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.