C++ 비트별 XOR(^) 연산자란?
비트별 배타적 OR(Bitwise Exclusive OR) 연산자인 ^는 첫 번째 피연산자의 각 비트를 두 번째 피연산자의 대응하는 비트와 하나씩 비교합니다. 두 비트 중 하나가 0이고 다른 하나가 1일 때만 해당 결과 비트가 1로 설정되며, 그 외의 경우(두 비트가 모두 0이거나 모두 1인 경우)에는 결과 비트가 0으로 설정됩니다.
비트별 XOR 연산자의 양쪽 피연산자는 반드시 정수 계열 타입(integral type)이어야 합니다. 즉, int, unsigned short, long 같은 정수형에만 사용할 수 있으며, float나 double 같은 부동소수점 타입에는 적용할 수 없습니다.
XOR 진리표
| A | B | A ^ B |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
예제 코드
#include <iostream>
using namespace std;
int main() {
unsigned short a = 0x5555; // 0101... 비트 패턴
unsigned short b = 0xFFFF; // 1111... 비트 패턴
cout << hex << (a ^ b) << endl;
}실행 결과
aaaa
결과값 aaaa는 1010... 형태의 비트 패턴을 나타냅니다. 0x5555(0101...)의 각 비트가 0xFFFF(1111...)와 XOR 연산을 거치면서 모두 반전되어 0xAAAA(1010...)가 되는 것입니다.
이처럼 XOR 연산은 특정 비트 패턴을 반전(invert)하거나, 두 값이 서로 다른지 검사하거나, 간단한 암호화 및 체크섬 계산 등 다양한 분야에서 널리 활용됩니다.