простой и быстрый способ конвертировать int в двоичный?


то, что я ищу, это что-то вроде PHPs decbin функция в C#. Эта функция преобразует десятичные числа в свое представление в виде строки.

например, при использовании decbin(21) возвращает 10101 как результат.

нашел эта функция который в основном делает то, что я хочу, но может есть лучше / быстрее способ?

5 55
c#

5 ответов:

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"

чтобы иметь двоичное значение в (по крайней мере) заданном количестве цифр, дополненных нулями:

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

Преобразовать.ToString выполняет преобразование в двоичную строку.
В PadLeft добавляет нули, чтобы заполнить его до 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 вместо модуля и деления, поэтому я думаю, что это более быстрый способ.