비트마스크란 용어 그대로 비트(Bit)에 관련된 프로그래밍 테크 이다.
비트는 이진 숫자(binary digit)를 뜻하는 말로 컴퓨터에서 사용되는 데이터의 최소 단위이다.
비트는 0, 1의 값을 가질 수 있고, true/false 또는 on/off 라는 상태를 나타낸다.
이건 흔히 알고 있는 지식으로 컴퓨터는 0, 1 두가지 숫자만으로 표현하는 이진법을 사용하는 것을 의미한다.
정리하자면
비트마스크란 비트에 관련된 테크이고 비트는 이진숫자를 뜻하는 말이며
이제 비트연산을 알아보자
AND 연산
대응하는 두 비트가 모두 1일때, 1을 반환한다.
OR 연산
대응하는 두 비트가 모두 1 또는 하나라도 1 일때, 1을 반환한다.
XOR 연산(^)
대응하는 두 비트가 서로 다르면 1을 반환.
NOT 연산(~)
비트의 값을 반전하여 반환.
시프트(Shift) 연산(>>, <<)
왼쪽 또는 오르쪽으로 비트를 옮긴다.
실제 연산을 하는 경우
만약 두 수 A와 B를 비트 연산 하는 경우에는 가장 뒤의 자리부터 하나씩 연산을 수행하면 된다.
시프트연산의 경우
A<<B (A를 왼쪽으로 B비트만큼 민다)
1 << 0 = 1
1 << 1 = 2
1 << 2 = 4
1 << 3 = 8
1 << 4 = 16
1 << 3 = 24
5 << 10 = 5120
즉, A << B = A x 2^B 임을 알 수 있다.
반대로 A>>B (A를 오른쪽으로 B비트만큼 민다)는 A/2^B 임을 알 수 있다.
(A+B)/2는 (A+B) >> 1 로 쓸 수 있다.
이제 비트연산을 정리해 봤으니 비트마스크가 무엇인지 알아보자
비트마스크는 정수로 집합을 나타낼 수 있다.
{1, 3, 4, 5, 9} = 570 = 2 + 2^3 + 2^4 + 2^5 + 2^9
비트연산의 장점은
1. 정수 하나로 나타낼 수 있다.
2. 정수 이기에 배열의 인덱스로 쓸 수 있다.
그래서 보통 0 부터 N-1까지 정수로 이루어진 집합을 나타낼 때 사용한다.
1 부터 N까지 정수로 이루어진 집합을 사용하는 건 공간이 2배 더 필요하다.( << 가 적용되기 때문)
비트마스크를 통해 해당 배열에 0, 1, 2, 3 등이 포함 되어 있는지 검사를 할 수 있다.