본문 바로가기
파이썬/파이썬 문법(심화)

2진수로 표현한 숫자의 1의 개수 세기.

by soypablo 2022. 10. 27.
def count_one(x):
    cnt = 0
    while x:
        x &= x - 1
        cnt += 1
    return cnt

이항 비트 연산을 이용한 log(n) 연산.

원리는 간단하게 직접 해보면 안다.

ex = 7

좌항(10진법) => 우항(2진법)

while loop1

7 => 111

7 - 1 => 110

7 & 6 = 11

while loop2

3 => 11

3 - 1 => 10

3 & 2 = 1

while loop3

1 => 1

1 - 1 => 0

1 & 0 = 0(condition end)

3번의 연산=> 1의 개수가 세개이다.