비트 마스킹

CJB_ny·2023년 2월 21일
0

코테

목록 보기
5/5

>>, <<

a << b == a * 2^b;

a >> b == a * (1/2)^b

16 >> 2 == 16 (1/2)^2 == 16 1/4 => 4

^(xor), ~

  • ^ :1001 ^ 0110 => 1111
  • ~ : one's completion, 1의 보수 연산자 => 비트 반전

    ~value = -(value + 1)

-16의 비트를 알고싶으면은

16의 비트를 ~ 한뒤에 + 1을 해준다.

  • 1해주면

=>


앞에 비트 더있음 32비트이니까

-(a+1) = ~a 랑 같다.
-a = ~a + 1 이라서

16을 반전 시키면은
a = 16;
~a 는? => -17이다.

idx번째 끄기

이거는 외워야됨.

가만보면 맞는말이다.

idx 켜기

Toggle기능 같은 경우

0 -> 1, 1 -> 0으로 만드는 부분이다.

int s = 18;
int idx = 1;
s ^= (1 << idx);
cout << s << endl; // 16

10010
00010
=>
10000 == 16

xor을 통해서 껏다 켯다 가능

최하위 비트 찾기

켜져있는거 중에서 최하위 비트 찾는 거 말하는거다.

이거 찾는게

idx = (-S & S);

s = 10010
-s = 01101 -> 01110


10010
01110
이거두개 &하면은

00010

최하위 비트 찾음 idx = idx = 2^1

크기가 n인 집합 모든 비트 켜기 ❗

크기가 4인 비트를 모두 킬려면

즉 0 0 0 0 이거를 싹다 1 1 1 1로 킬려면

( 1 << 4 ) - 1 해주면된다.

1 0 0 0 0
-       1
------------
0 1 1 1 1 => 15


1 0 1
-   1
------
1 0 0 => 5 - 1 => 4


1 0
- 1
----
0 1 => 1

idx번재 키기

S |= 1 << idx

profile
https://cjbworld.tistory.com/ <- 이사중

0개의 댓글