세트 비트(Set Bit)란 숫자를 이진수로 표현했을 때 값이 1인 비트를 의미합니다. 이 글에서는 주어진 십진수에 포함된 세트 비트의 개수를 세는 방법을 알아보겠습니다.
# 53을 이진수로 표현하면: 110101 # 세트 비트의 개수는 1의 개수와 같습니다. # 여기서는 4개입니다.
기본 원리
아래 프로그램에서는 숫자를 이진수로 변환한 뒤 세트 비트를 셉니다. 파이썬의 bin() 함수는 변환 결과 앞에 0b라는 두 글자를 붙이므로, 문자열 슬라이싱 기법으로 이 부분을 제거합니다. 그다음 for 루프를 사용해 각 자릿값이 '1'인 경우 카운트를 하나씩 증가시켜 세트 비트의 개수를 구합니다.
예제
value = 59
# 이진수 값 확인
print(bin(value))
# 앞의 두 문자 제거
bitvalue = bin(value)[2:]
print(bitvalue)
count = 0
for digit in bitvalue:
if digit == '1':
count = count + 1
print("Length of set bits: ", count)출력
위 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.
0b111011 111011 Length of set bits: 5
리스트 컴프리헨션으로 더 간결하게
for 루프 대신 리스트 컴프리헨션을 활용하면 같은 로직을 한 줄로 표현할 수 있어 코드가 훨씬 간결해집니다.
value = 59
bitvalue = bin(value)[2:]
count = sum(1 for digit in bitvalue if digit == '1')
print("Length of set bits: ", count)
# 출력: Length of set bits: 5또는 조건식을 그대로 합산하는 방식도 가능합니다.
count = sum(digit == '1' for digit in bitvalue)
print("Length of set bits: ", count)
# 출력: Length of set bits: 5마무리
이처럼 bin() 함수와 슬라이싱, 그리고 리스트 컴프리헨션만 활용하면 별도의 라이브러리 없이도 세트 비트의 개수를 손쉽게 계산할 수 있습니다. 참고로 파이썬 3.10 이상에서는 내장 함수인 int.bit_count()를 사용하면 한 번의 호출로 동일한 결과를 얻을 수 있습니다.