코테/알고리즘

비트마스크

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);

(참고)

코드트리

https://dalkuni.tistory.com/4

 

특정 비트를 0 또는 1로 바꾸는 방법

x번째 비트를 1로 SETOR (|)를 사용. value |=

dalkuni.tistory.com

 

반응형