상세 컨텐츠

본문 제목

비트 마스킹

자료구조&알고리즘/C++

by geminanolja 2025. 3. 5. 21:17

본문

 


🔹 1️⃣ 왼쪽: 이진수 표현과 숫자 매칭

왼쪽에는 2진수(비트)로 표현된 숫자들이 나열되어 있음.
각 숫자는 십진수 값과 대응되도록 정리되었어.

이진수(Binary) 십진수(Decimal)

000 0
001 1
010 2
011 3
100 4
101 5
110 6
111 7

비트 마스킹에서 n개의 원소가 있을 때, 2^n개의 경우를 표현할 수 있음.
예를 들어, 3비트라면 2^3 = 8개의 상태를 가질 수 있어.


🔹 2️⃣ 오른쪽: 비트의 의미

오른쪽에서는 비트 연산을 통한 상태 체크가 설명되어 있음.

  1. 특정 숫자가 2진수로 변환되는 과정 (1000 = 8)
  2. 2^n의 합을 이용해 비트 표현 23+22+21+20=82^3 + 2^2 + 2^1 + 2^0 = 8
  3. 비트가 1이면 True, 0이면 False로 상태를 표현
    1, 1, 1, 0  →  True, True, True, False
    
    즉, 특정 비트가 1이면 해당 값이 활성화(True), 0이면 비활성화(False)라는 의미!

🔹 3️⃣ 핵심 개념: 비트 마스크를 이용한 상태 저장

비트 마스크를 이용한 부분 집합 표현 또는 특정 상태 저장

✅ 특정 비트가 1인지 확인하는 코드

bool isSet(int n, int k) {
    return (n & (1 << k)) != 0;  // k번째 비트가 1인지 확인
}

int main() {
    int num = 6; // 6 = 0b110
    cout << isSet(num, 0) << endl;  // false (0)
    cout << isSet(num, 1) << endl;  // true (1)
    cout << isSet(num, 2) << endl;  // true (1)
}

➡ 입력값 num = 6 (110)의 비트를 검사했을 때:

  • 0번째 비트: 0 (False)
  • 1번째 비트: 1 (True)
  • 2번째 비트: 1 (True)

즉, 1이면 활성화(True), 0이면 비활성화(False) 라는 의미!


✅ 결론

  • 왼쪽: 각 숫자를 비트(이진수)로 변환하여 표현하는 방법
  • 오른쪽: 비트 연산을 이용해 특정 상태(활성/비활성)를 저장하는 원리
  • 비트 마스크는 1이면 True(활성화), 0이면 False(비활성화)를 의미
  • 비트 연산(&, |, ^)을 활용하여 특정 비트 조작 가능

비트 마스크는 상태를 효율적으로 저장하고, 연산을 빠르게 수행할 수 있는 강력한 기법이다! 🚀

관련글 더보기