비트연산은 알고리즘 TCP(외판원순환) 문제나, 네트워크ip패킷, 레지스트리 값 수정 등 다양하게 사용된다. 유용한 연산들을 기억할 수 있도록 모아 둔다.
👉 1 << n
bin(1<<0) = 0b1
bin(1<<2) = 0b100
👉 n & 1 << n
bin(100) = 0b1100100
bin(100) & 1<<2 = 100
bin(100) & 1<<3 = 0
1 if bin(100) & (1 << 2) else 0 = 1
1 if bin(100) & (1 << 3) else 0 = 0
👉 (1 << n) - 1
bin(1<<1) - 1 = 0b1
bin(1<<2) = 0b11
👉 n & (n - 1) == 0
bin(4) & bin(4) - 1 = 0b100 & 0b011 = 0
(0 == 0 = True)bin(5) & bin(5) - 1 = 0b101 & 0b100 = 1
(1 == 0 = False)
👉 def count_bit(n):
return n % 2 + count_bit(n//2) if n >=2 else n
def bit_count(n): k = 0 cnt = 0 while n >=1 (1<<k): if n & (1 << k) != 0: cnt += 1 k += 1 return cnt
👉 boolean ^= True
example = True
example ^= True
print(example) -> False
example ^= True
print(example) -> True
https://shoark7.github.io/programming/knowledge/some-useful-bit-tricks-and-usages