C++에서 비트 AND 연산자(&)는 첫 번째 피연산자의 각 비트를 두 번째 피연산자의 대응하는 비트와 하나씩 비교하는 이항 연산자입니다. 비교 규칙은 매우 단순합니다.
- 두 비트가 모두 1이면 → 결과 비트는 1
- 그 외의 경우(하나라도 0이면) → 결과 비트는 0
즉, 논리 곱(AND)을 비트 단위로 수행한다고 생각하면 됩니다. 참고로 비트 AND 연산자의 양쪽 피연산자는 반드시 정수형(integral type)이어야 하며, float나 double 같은 부동소수점 타입에는 사용할 수 없습니다.
비트 AND 진리표
| A | B | A & B |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 1 |
예제 코드
#include <iostream>
using namespace std;
int main() {
unsigned short a = 0x5555; // 2진 패턴: 0101 0101 ...
unsigned short b = 0xAAAA; // 2진 패턴: 1010 1010 ...
cout << hex << (a & b) << endl;
}위 코드에서 변수 a는 16진수 0x5555(2진수로 0101... 패턴), 변수 b는 16진수 0xAAAA(2진수로 1010... 패턴)를 저장합니다. 두 값의 각 비트를 비교해 보면 어느 자리에서도 두 비트가 동시에 1인 경우가 없습니다.
실행 결과
0
따라서 출력 결과는 0이 됩니다. 이처럼 서로 보완적인(complementary) 비트 패턴을 가진 두 값을 AND 연산하면 모든 비트가 0이 되어 결과값도 0이 나오게 됩니다.
비트 AND의 주요 활용 사례
- 특정 비트 검사(masking): 특정 비트가 켜져 있는지 확인할 때 사용합니다.
- 비트 초기화: 원하지 않는 비트들을 0으로 끄는 데 활용됩니다.
- 짝수·홀수 판별:
n & 1결과가 0이면 짝수, 1이면 홀수입니다.