Вопрос-ответ

How to get 0-padded binary representation of an integer in java?

Как получить двоичное представление целого числа с дополнением 0 в Java?

например, для 1, 2, 128, 256 вывод может быть (16 цифр):

0000000000000001
0000000000000010
0000000010000000
0000000100000000

Я пробовал

String.format("%16s", Integer.toBinaryString(1));

он помещает пробелы для заполнения слева:

`               1'

Как поставить 0s для заполнения. Я не смог найти это в Formatter. Есть ли другой способ сделать это?

P.S. этот пост описывает, как форматировать целые числа с добавлением 0 слева, но это не для двоичного представления.

Переведено автоматически
Ответ 1

Я думаю, что это неоптимальное решение, но вы могли бы сделать

String.format("%16s", Integer.toBinaryString(1)).replace(' ', '0')
Ответ 2

В java.util не встроено двоичное преобразование.В программе форматирования я бы посоветовал вам либо использовать String.replace для замены пробела нулями, как в:

String.format("%16s", Integer.toBinaryString(1)).replace(" ", "0")

Или реализуйте свою собственную логику для преобразования целых чисел в двоичное представление с добавлением левого отступа где-нибудь вдоль строк, приведенных в this so.
Или, если вам действительно нужно передать числа в форматирование, вы можете преобразовать свое двоичное представление в BigInteger, а затем отформатировать его с начальными нулями, но это очень дорого во время выполнения, как в:

String.format("%016d", new BigInteger(Integer.toBinaryString(1)))
Ответ 3

Вот новый ответ на старый пост.

Чтобы дополнить двоичное значение начальными нулями до определенной длины, попробуйте следующее:

Integer.toBinaryString( (1 << len) | val ).substring( 1 )

Если len = 4 и val = 1,

Integer.toBinaryString( (1 << len) | val )

возвращает строку "10001", затем

"10001".substring( 1 )

отбрасывается самый первый символ. Итак, мы получаем то, что хотим:

"0001"

Если val, скорее всего, будет отрицательным, попробуйте:

Integer.toBinaryString( (1 << len) | (val & ((1 << len) - 1)) ).substring( 1 )
Ответ 4

Вы можете использовать Apache Commons StringUtils. Он предлагает методы для заполнения строк:

StringUtils.leftPad(Integer.toBinaryString(1), 16, '0');
java