C#으로 숫자의 세트 비트 개수 계산하기
이진수에서 값이 1인 비트를 세트 비트(set bit)라고 합니다. 이 글에서는 C#을 사용해 특정 숫자에 포함된 총 세트 비트의 개수를 구하는 방법을 알아보겠습니다.
예시로 사용할 숫자는 십진수 11이며, 이를 이진수로 변환하면 다음과 같습니다.
1011
1011에는 세트 비트(1)가 총 3개 있습니다. 이를 구하려면 숫자가 0이 될 때까지 반복문을 실행하며 각 비트를 하나씩 확인하면 됩니다.
세트 비트 계산 로직
핵심은 비트 연산자를 활용하는 것입니다. num & 1은 가장 오른쪽 비트(LSB)가 1인지 검사하고, num >>= 1은 비트를 오른쪽으로 한 칸 시프트하여 다음 비트를 차례대로 확인할 수 있게 해줍니다.
while (num > 0) {
cal += num & 1;
num >>= 1;
}전체 예제 코드
아래 코드를 사용하면 숫자의 총 세트 비트 개수를 셀 수 있습니다.
using System;
public class Demo {
public static void Main() {
int cal = 0;
// 11의 이진수는 1011
int num = 11;
while (num > 0) {
cal += num & 1;
num >>= 1;
}
// 1011에서 1인 비트는 3개
Console.WriteLine("Total bits: " + cal);
}
}
실행 결과
Total bits: 3
추가 팁
이처럼 간단한 반복문과 비트 연산만으로도 세트 비트 개수를 손쉽게 계산할 수 있습니다. 참고로 .NET Core 3.0 이상 환경에서는 System.Numerics.BitOperations.PopCount() 메서드를 사용하면 하드웨어 명령어 기반으로 더 빠르게 처리할 수도 있습니다.