코테/알고리즘
비트마스크
imname1am
2023. 12. 18. 13:37
반응형
🧩 비트마스크 연산자
1. and 연산자 (&)
- 둘 다 1일 때만 1, 아니라면 0이 되는 연산
2. or 연산자 (|)
- 둘 중 하나라도 1이라면 1, 아니라면 0이 되는 연산
3. xor 연산자 (^)
- 두 bit가 다른 값이라면 1, 같은 값이라면 0이 되는 연산
4. left shift 연산자 (<<)
- 수 a를 이진법으로 표현한 뒤 모든 bit를 b번 왼쪽으로 밀어준 뒤 그 결과를 다시 10진수로 표현
- 한 번에 값 2배 (예 5 << 2 : 10)
5. right shift 연산자 (>>)
- 수 a를 이진법으로 표현한 뒤 모든 bit를 b번 오른쪽으로 밀어준 뒤 그 결과를 다시 10진수로 표현 (더 이상 밀릴 곳이 없는 bit는 사라짐)
- 한 번에 값이 2로 나눈 몫으로 바뀜
🧩 비트 마스크 활용 연산
1. 수 k가 x에 존재하는지 여부 확인 (&)
((x >> k) & 1) == 1 : 0인지 1인지로 판단 (1이면 존재, 0이면 X)
- 괄호를 잘 쳐주지 않으면 에러가 난다.
2. 수 새롭게 추가 / 삭제 (^)
x ^ (1 << k) : 수 k가 있다면 없애고, 없다면 새로 추가
3. 모든 수 한 번에 다 채우기
(1 << n) - 1 : 오른쪽 n개의 bit 전부 1로 만들기
4. 공집합 만들기
S = 0;
- x번째 비트를 1로 SET (|)
val |= << x;
- x번째 비트를 0으로 SET (&)
val &= ~(1 << x);
(참고)
코드트리
특정 비트를 0 또는 1로 바꾸는 방법
x번째 비트를 1로 SETOR (|)를 사용. value |=
dalkuni.tistory.com
반응형