혦's STACK
비트마스크( bit mask ) 본문
비트마스크 (bit mask)
1. bit mask 란?
정수의 이진수 표현을 통해 비트 단위(bitwise) 연산을 할수 있는 변수를 비트마스크(bit mask) 라고 한다.
- 특정 비트가 켜져있다. = '비트가 1이다.'
- 특정 비트가 꺼져있다. = '비트가 0이다.'
비트마스크(bit mask)를 사용한다면 빠르고 간결한 연산이 가능하며, 메모리를 절약할 수 있다. 만약 자료형의 데이터 범위가 정해져 있다면 오버플로우나 언더플로우에 주의해야 합니다.
비트 연산을 할 때에는 우선순위를 주의하여 괄호를 치는 것을 추천합니다.
2. 관련 연산 및 표현
비트연산자
AND 연산
A & B : 둘다 1일 경우에는 1, 나머지는 0이다.
OR 연산
A | B : 둘다 0일 경우에는 0, 나머지는 1이다.
XOR 연산
A ^ B : 둘다 같은 값일 경우에는 0, 다른 값이면 1이다.
NOT 연산
~A : 0일 경우에는 1, 1일 경우에는 0이다.
SHIFT 연산
A << B : A의 각 자릿수의 비트를 좌측으로 B만큼 이동한다. 오른쪽에는 0으로 채운다.
A >> B : A의 각 자릿수의 비트를 우측으로 B만큼 이동한다. 왼쪽에는 0으로 채운다.
연산의 응용
공집합 과 전부 true인 집합
공집합 : 0 으로 표현
A = 0
전부 true 일 때 : full set일 경우 1을 자릿수만큼 왼쪽으로 시프트 한 후에 1을 빼줍니다.
(1<< 자릿수) - 1
다양한 응용
추가 : 특정 원소만 true로 전환
(집합) |= (1<<특정원소번째) : set |= (1<<p);
포함 여부 확인 : 특정 원소가 true인지 확인
(집합) & (1<<특정원소번째) : set & (1<<p);
삭제 : 특정원소를 false로 전환
(집합) &= ~(1<<특정원소번째) : set &= ~(1<<p);
토글 : 특정원소가 false 이면 true로 true면 false로 변환
(집합) ^= (1<< 특정원소번째) : set ^= (1<<p);
집합연산
- 합집합 : A | B
- 교집합 : A & B
- 차집합 : A & ~ B