CS지식/알고리즘 & 자료구조

비트마스킹 (with ChatGPT)

뮤츠 2024. 5. 5. 21:46

비트마스킹(bit masking)은 비트(bit) 단위의 연산을 활용하여 특정 데이터의 일부분을 선택하거나, 변경하는 기술입니다. 이 방법은 주로 효율적인 데이터 저장과 빠른 연산을 위해 사용되며, 특히 상태 관리나 설정 옵션을 처리할 때 유용합니다.

비트 연산자

비트마스킹에서는 주로 다음과 같은 비트 연산자를 사용합니다:

  1. AND (&): 두 비트 모두 1이면 1을 반환합니다. 주로 특정 비트를 체크할 때 사용됩니다.
  2. OR (|): 두 비트 중 하나라도 1이면 1을 반환합니다. 비트를 설정할 때 사용됩니다.
  3. XOR (^): 두 비트가 서로 다르면 1을 반환합니다. 비트를 토글(반전)할 때 사용됩니다.
  4. NOT (~): 모든 비트를 반전시킵니다. 0은 1로, 1은 0으로 변경합니다.
  5. Shift Left (<<): 비트를 왼쪽으로 이동시킵니다. 주로 값을 증가시키거나, 특정 위치에 비트를 설정할 때 사용됩니다.
  6. Shift Right (>>): 비트를 오른쪽으로 이동시킵니다. 주로 값을 감소시키거나, 비트를 추출할 때 사용됩니다.

비트마스킹의 예시와 설명

비트마스킹은 여러 상태를 하나의 정수로 표현하고 관리할 수 있게 해줍니다. 예를 들어, 다섯 개의 설정 옵션을 각각의 비트로 표현한다고 가정해 봅시다:

  • 설정 A: 첫 번째 비트 (1 << 0 == 1)
  • 설정 B: 두 번째 비트 (1 << 1 == 2)
  • 설정 C: 세 번째 비트 (1 << 2 == 4)
  • 설정 D: 네 번째 비트 (1 << 3 == 8)
  • 설정 E: 다섯 번째 비트 (1 << 4 == 16)

여기서 설정 A와 설정 C를 활성화하고자 한다면, OR 연산자를 사용하여 이 두 설정을 표현할 수 있습니다:

int settings = (1 << 0) | (1 << 2); // 결과는 1 | 4, 즉 5

이제 설정 A가 활성화되었는지 확인하려면 AND 연산자를 사용합니다:

boolean isSetA = (settings & (1 << 0)) != 0; // true 반환

설정 C를 비활성화하려면 XOR 연산자를 사용합니다:

settings ^= (1 << 2); // 설정 C의 비트를 토글

적용

비트마스킹은 메모리 사용을 최적화하고, 연산 속도를 높이는 데 유용합니다. 특히, 설정의 켜짐/꺼짐 상태를 관리하거나, 작은 범위 내에서 여러 항목의 상태를 체크하는 등의 경우에 매우 효과적입니다.

간단한 예로, 복잡한 조건을 효율적으로 관리하거나, 동시에 여러 조건을 검사해야 할 때 비트마스킹을 사용하면 매우 빠르고 간결한 코드를 작성할 수 있습니다.

'CS지식 > 알고리즘 & 자료구조' 카테고리의 다른 글

플로이드 와샬 알고리즘  (0) 2024.05.19
다익스트라 알고리즘.  (0) 2024.03.02