알고리즘보다는 테크닉 중 하나로써, 정수의 이진수 표현을 활용한 기법이다.
하나의 비트는 0 이나 1로 표현될 수 있습니다. 정수의 이진수 표현을 자료구조로 쓰는 기법을 말합니다.
비트마스크에서 중요한 두 가지 정보
1. 이진수는 0, 1 만을 가지고, true/false 상태를 가진다.
2. 이진수는 십진수로 표현 가능하다.
그렇다면 과연 이를 어떻게 활용할 수 있을까?
우리는 길이가 5인 집합 { 0, 1, 2, 3, 4 } 가 존재한다고 가정해본다.
여기서 몇가지 요소를 뽑아 어떤 요소를 선택했는 지 표현할 수 있다.
즉, 집합의 어떤 요소를 구성하고 있는지를 나타내는 부분집합을 어떻게 표현할 수 있는가?
{ 1, 2, 3, 4 }, { 1, 2, 4 }, { 2, 4 },
{ 1 } ...........
array1 = [1, 1, 1, 1, 0];
array2 = [1, 1, 0, 1, 0];
array3 = [1, 0, 1, 0, 0];
{ 0, 1, 2, 3, 4 } => 11111 => (2^4 * 1) + (2^3 * 1) + (2^2 * 1) + (2^1 * 1) + (2^0 * 1) = 31
{ 1, 2, 3, 4 } => 11110 => (2^4 * 1) + (2^3 * 1) + (2^2 * 1) + (2^1 * 1) = 30
{ 1, 2, 4 } => 10110 => (2^4 * 1) + (2^2 * 1) + (2^1 * 1) = 22
{ 2, 4 } => 10100 => (2^4 * 1) + (2^2 * 1) = 20
{ 1 } => 00010 => (2^1 * 1) = 2
대응하는 두 비트가 모두 1일 때, 1을 반환.
1010 & 1111 = 1010
대응하는 두 비트가 모두 1 또는 하나라도 1일 때, 1을 반환.
1010 | 1111 = 1111
대응하는 두 비트가 서로 다르면 1을 반환.
1010 | 1111 = 0101
비트의 값을 반전하여 반환.
~1010 = 0101
왼쪽 또는 오른쪽으로 비트를 옮긴다.
00001010 << 2 = 101000
00001010 >> 2 = 000010