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

C++ 비트 연산자 완벽 정리: AND, OR, XOR의 원리와 예제

C++의 세 가지 비트 연산자 소개

C++에서 사용할 수 있는 비트 연산자는 크게 세 가지입니다. 바로 비트 AND(&), 비트 OR(|), 그리고 비트 XOR(^)입니다. 이 연산자들은 정수형 데이터를 비트(bit) 단위로 직접 조작할 때 사용되며, 플래그 처리, 마스킹, 임베디드 프로그래밍 등 다양한 분야에서 활용됩니다. 비트 연산자의 양쪽 피연산자는 반드시 정수형(integral type)이어야 합니다.

1. 비트 AND 연산자 (&)

비트 AND 연산자(&)는 첫 번째 피연산자의 각 비트를 두 번째 피연산자의 대응하는 비트와 비교합니다. 두 비트가 모두 1일 경우에만 해당 결과 비트가 1로 설정되고, 그 외의 경우에는 0으로 설정됩니다.

예제 코드

#include <iostream>
using namespace std;
int main() {
    unsigned short a = 0x5555;   // 0101 ... 패턴
    unsigned short b = 0xAAAA;   // 1010 ... 패턴
    cout << hex << (a & b) << endl;
}

실행 결과

0

0x5555(0101 패턴)와 0xAAAA(1010 패턴)는 대응하는 비트가 항상 서로 다르므로, 두 비트가 동시에 1인 경우가 없어 결과는 0이 됩니다.

2. 비트 OR 연산자 (|)

비트 OR 연산자(|) 역시 첫 번째 피연산자의 각 비트를 두 번째 피연산자의 대응하는 비트와 비교합니다. 두 비트 중 하나라도 1이면 해당 결과 비트가 1로 설정되고, 두 비트가 모두 0일 경우에만 0으로 설정됩니다.

예제 코드

#include <iostream>
using namespace std;
int main() {
    unsigned short a = 0x5555;   // 0101 ... 패턴
    unsigned short b = 0xAAAA;   // 1010 ... 패턴
    cout << hex << (a | b) << endl;
}

실행 결과

ffff

두 패턴의 비트가 서로 보완 관계이기 때문에, 모든 자릿수에서 하나 이상의 비트가 1이 되어 결과는 ffff가 됩니다.

3. 비트 XOR 연산자 (^)

비트 배타적 OR(XOR) 연산자(^)는 첫 번째 피연산자의 각 비트를 두 번째 피연산자의 대응하는 비트와 비교합니다. 두 비트 중 하나만 1이고 나머지 하나가 0일 경우에만 결과 비트가 1로 설정되며, 두 비트가 서로 같으면 0으로 설정됩니다.

예제 코드

#include <iostream>
using namespace std;
int main() {
    short a = 0x5555;            // 0101 ... 패턴
    unsigned short b = 0xFFFF;   // 1111 ... 패턴
    cout << hex << (a ^ b) << endl;
}

실행 결과

aaaa

이 결과는 1010... 패턴을 나타냅니다. 0x5555를 모든 비트가 1인 0xFFFF와 XOR 연산하면 모든 비트가 반전되어 0xAAAA가 됩니다.

마무리

세 가지 비트 연산자는 각각 고유한 규칙에 따라 비트를 결합합니다. AND는 두 비트가 모두 1일 때, OR은 하나라도 1일 때, XOR은 두 비트가 서로 다를 때 1을 반환한다는 점을 기억하면 됩니다. 이러한 연산자들을 잘 활용하면 메모리를 절약하고 연산 속도를 높이는 효율적인 코드를 작성할 수 있습니다.