이 글에서는 정수에 포함된 세트 비트(set bit)의 개수를 확인하는 방법을 알아보겠습니다. 세트 비트란 숫자를 이진수로 표현했을 때 값이 1인 비트를 의미합니다.
예를 들어 숫자 13을 이진수로 표현하면 1101이 되며, 여기에는 세트 비트가 총 3개 있습니다. 따라서 이 숫자의 세트 비트 개수는 3이 됩니다.
문제 해결 방식
이 문제는 다음과 같은 방식으로 해결할 수 있습니다.
- 숫자를 오른쪽으로 한 비트씩 시프트(shift)합니다.
- 시프트하기 전 최하위 비트(LSb)가 1이라면 카운트를 증가시킵니다.
- 숫자가 0이 될 때까지 위 과정을 반복합니다.
알고리즘
countSetBit()
begin
count := 0
while n is not 0, do
if LSb of n is set, then
count := count + 1
end if
n := n after shifting 1 bit to right
done
return count
endC/C++ 구현 예제
#include<iostream>
using namespace std;
int count_set_bit(int n) {
int count = 0;
while(n != 0) {
if(n & 1 == 1) {
count++;
}
n = n >> 1; //오른쪽으로 1비트 시프트
}
return count;
}
int main() {
int n;
cout << "Enter a number: ";
cin >> n;
cout << "Number of set bits: " << count_set_bit(n);
}실행 결과
Enter a number: 29 Number of set bits: 4
위 코드는 C 컴파일러 환경에서도 유사한 로직으로 동작할 수 있지만, C와 C++ 간의 문법 차이나 함수 선언 방식이 일치하지 않으면 컴파일 단계에서 오류가 발생할 수 있습니다. 특히 전달되는 인자의 개수나 타입이 함수 정의와 맞지 않으면 "too many arguments"와 같은 에러 메시지가 출력됩니다. 따라서 사용 중인 언어 표준에 맞게 코드를 작성하고, 함수 시그니처가 호출부와 정확히 일치하는지 확인하는 것이 중요합니다.