비트 연산자(Bitwise Operators) 정리
🖥️ 비트 연산자(Bitwise Operators)란?
비트 연산자(Bitwise Operators)는 정수의 개별 비트 단위로 연산을 수행하는 연산자.
논리 연산자(AND, OR, XOR 등)와 유사하지만, 비트 수준에서 동작하여 보다 낮은 수준의 연산을 수행할 수 있음.
비트 연산은 메모리 효율적인 연산을 가능하게 하며, 임베디드 시스템, 암호화, 그래픽 처리, 네트워크 프로토콜 등 다양한 분야에서 사용됨.
🖥️ 비트 연산자를 사용하는 이유
💥 비트 연산의 장점
- 연산 속도가 빠름 → 정수 연산보다 비트 연산이 훨씬 빠름
- 메모리 사용 절약 → 불필요한 데이터 사용을 줄이고, 최적화 가능
- 하드웨어 제어 → 하드웨어 레지스터를 직접 조작 가능
- 특정 비트 조작 → 특정 비트를 켜거나 끄는 등의 작업 수행 가능
📌 비트 연산자는 비트 마스킹, 비트 플래그, 최적화된 데이터 저장 및 압축 등에 활용됨.
🖥️ 비트 연산자의 종류 및 사용법
연산자 | 설명 | 예제 (A = 0b1100 , B = 0b1010 ) | 결과값 |
---|---|---|---|
& (AND) | 두 비트가 모두 1일 때만 1 | A & B → 0b1100 & 0b1010 | 0b1000 (8) |
| (OR) | 하나라도 1이면 1 | A | B → 0b1100 | 0b1010 | 0b1110 (14) |
^ (XOR) | 서로 다를 때만 1 | A ^ B → 0b1100 ^ 0b1010 | 0b0110 (6) |
~ (NOT) | 비트를 반전 | ~A → ~0b1100 | 0b...0011 (-13) |
<< (왼쪽 시프트) | 비트를 왼쪽으로 이동 (곱하기 효과) | A << 1 | 0b11000 (24) |
>> (오른쪽 시프트) | 비트를 오른쪽으로 이동 (나누기 효과) | A >> 1 | 0b0110 (6) |
📌 왼쪽 시프트(«)는 2^n
을 곱하는 효과, 오른쪽 시프트(»)는 2^n
을 나누는 효과가 있음.
🖥️ 비트 연산자 예제 코드
🔹 C++ 예제
#include <iostream>
using namespace std;
int main() {
int A = 12; // 0b1100
int B = 10; // 0b1010
cout << "A & B = " << (A & B) << endl; // 8 (0b1000)
cout << "A | B = " << (A | B) << endl; // 14 (0b1110)
cout << "A ^ B = " << (A ^ B) << endl; // 6 (0b0110)
cout << "~A = " << (~A) << endl; // -13 (비트 반전)
cout << "A << 1 = " << (A << 1) << endl; // 24 (0b11000)
cout << "A >> 1 = " << (A >> 1) << endl; // 6 (0b0110)
return 0;
}
출력 결과:
A & B = 8
A | B = 14
A ^ B = 6
~A = -13
A << 1 = 24
A >> 1 = 6
🖥️ 비트 연산자의 활용 예시
| 활용 분야 | 설명 | |———–|——| | 비트 마스킹(Bit Masking) | 특정 비트만 추출하거나 설정하는 데 사용 | | 비트 플래그(Bit Flags) | 여러 개의 불리언 값을 하나의 정수에 저장 | | 연산 최적화 | 곱셈·나눗셈을 시프트 연산으로 대체하여 연산 속도 향상 | | 하드웨어 제어 | 임베디드 시스템에서 하드웨어 레지스터를 조작하는 데 사용 |
비트 마스킹 예제 (특정 비트 확인)
int value = 0b10101100;
int mask = 0b00000100;
if (value & mask) {
cout << "세 번째 비트가 1입니다." << endl;
} else {
cout << "세 번째 비트가 0입니다." << endl;
}
🖥️ 비트 연산자 사용 시 주의할 점
- 부호 있는 정수의 비트 연산은 주의해야 함 (
~
연산 시 결과가 예상과 다를 수 있음) - 시프트 연산(
<<
,>>
)은 정수 오버플로우를 유발할 수 있음. - 비트 연산 결과를 확인할 때는 2진수 변환을 활용하는 것이 좋음.
출처 :
* https://www.tcpschool.com/c/c_operator_bitwise
* https://en.wikipedia.org/wiki/Bitwise_operation
* https://cplusplus.com/doc/tutorial/operators/