Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C#으로 숫자의 총 비트 수 계산하기 – Math.Log() 메서드 활용법

숫자의 총 비트 수를 계산하는 작업은 비트 연산이나 저수준 프로그래밍에서 자주 필요합니다. C#에서는 Math.Log() 메서드를 활용하면 아주 간단하게 구할 수 있습니다.

기본 개념

예를 들어 우리가 가진 숫자가 12라고 가정해 보겠습니다. 10진수 리터럴을 할당하여 uint 변수를 선언하고 초기화합니다.

uint val = 12;

12의 이진수 표현은 다음과 같습니다.

1100

위 이진수는 총 4개의 비트로 구성되어 있습니다. 따라서 숫자의 총 비트 수를 구하려면 밑(base)이 2인 로그를 계산하는 Math.Log() 메서드에 1을 더해 사용하면 됩니다.

uint res = (uint)Math.Log(val, 2.0) + 1;

동작 원리

Math.Log(val, 2.0)은 val을 2로 몇 번 나눌 수 있는지, 즉 로그의 지수 값을 반환합니다. 여기에 1을 더하면 실제 비트 개수가 됩니다. 예를 들어 12의 경우 2³ ≤ 12 < 2⁴이므로 로그 값은 약 3.58이고, 정수로 변환하면 3이 되며, 여기에 1을 더해 최종적으로 4비트라는 결과를 얻습니다.

예제 코드

다음 전체 코드를 실행하여 숫자의 총 비트 수를 직접 확인해 보세요.

using System;
public class Demo {
    public static void Main() {
        uint val = 12; // 이진수로 1100
        uint res = (uint) Math.Log(val, 2.0) + 1;
        // 1100은 4비트입니다.
        Console.WriteLine("Total bits: " + res);
    }
}

실행 결과

Total bits: 4

주의 사항

이 방법은 입력값이 0일 때 문제가 발생할 수 있습니다. log(0)은 수학적으로 정의되지 않으므로, 0에 대한 별도의 예외 처리를 추가하는 것이 안전합니다. 또한 부동소수점 연산의 특성상 매우 큰 수에서는 정확도 오차가 생길 수 있으므로, 완벽한 정확성이 요구되는 경우에는 비트 시프트 연산(>>)을 반복하며 비트를 세는 방식을 대안으로 고려할 수 있습니다.