Подтвердить что ты не робот

Простой и быстрый способ преобразования int в двоичный?

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

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

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

4b9b3361

Ответ 1

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

- Почти единственное использование для (в противном случае бесполезного) класса Convert.

Ответ 2

Большинство способов будут лучше и быстрее, чем функция, которую вы нашли. Это не очень хороший пример того, как сделать преобразование.

Встроенный метод 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

Ответ 3

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

Ответ 4

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

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

Convert.ToString выполняет преобразование в двоичную строку.
PadLeft добавляет нули для заполнения до 16 цифр.

Ответ 5

Это мой ответ:

    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 вместо модуляции и деления, поэтому я думаю, что это быстрее.