program story

int를 바이너리로 변환하는 쉽고 빠른 방법?

inputbox 2020. 11. 29. 10:26
반응형

int를 바이너리로 변환하는 쉽고 빠른 방법?


내가 찾고있는 것은 decbinC #의 PHP 함수 와 같은 것 입니다. 이 함수는 십진수를 문자열로 표현으로 변환합니다.

예를 들어 사용 decbin(21)하면 10101결과로 반환 됩니다.

기본적으로 내가 원하는 것을 수행 하는 이 기능찾았 지만 더 나은 / 빠른 방법이있을 수 있습니까?


var result = Convert.ToString(number, 2);

– (그렇지 않으면 쓸모없는) Convert클래스에 대한 거의 유일한 용도 .


대부분의 방법은 찾은 기능보다 더 좋고 빠릅니다. 변환을 수행하는 방법에 대한 좋은 예가 아닙니다.

기본 제공 방법 Convert.ToString(num, base)은 당연한 선택이지만 다른 방식으로 작동해야하는 경우 대체를 쉽게 작성할 수 있습니다.

이진수의 길이를 지정할 수있는 간단한 방법입니다.

public static string ToBin(int value, int len) {
   return (len > 1 ? ToBin(value >> 1, len - 1) : null) + "01"[value & 1];
}

재귀를 사용하고, 첫 번째 부분 (+ 앞)은 마지막 숫자를 제외한 숫자의 이진 표현을 만들기 위해 자신을 호출하고 두 번째 부분은 마지막 숫자를 처리합니다.

예:

Console.WriteLine(ToBin(42, 8));

산출:

00101010

int toBase = 2;
string binary = Convert.ToString(21, toBase); // "10101"

0으로 채워진 지정된 자릿수 (적어도)에 이진 값을 포함하려면 :

string bin = Convert.ToString(1234, 2).PadLeft(16, '0');

Convert.ToString은 이진 문자열로 변환합니다.
PadLeft는 0을 추가하여 최대 16 자리를 채 웁니다.


이것은 내 대답입니다.

    static bool[] Dec2Bin(int value)
    {
        if (value == 0) return new[] { false };
        var n = (int)(Math.Log(value) / Math.Log(2));
        var a = new bool[n + 1];
        for (var i = n; i >= 0; i--)
        {
            n = (int)Math.Pow(2, i);
            if (n > value) continue;
            a[i] = true;
            value -= n;
        }
        Array.Reverse(a);
        return a;
    }

모듈로 대신 Pow를 사용하고 나누기 때문에 더 빠른 방법이라고 생각합니다.

참고 URL : https://stackoverflow.com/questions/1838963/easy-and-fast-way-to-convert-an-int-to-binary

반응형