Java преобразует десятичное число в 12 бит с помощью побитового оператора & - PullRequest
0 голосов
/ 05 октября 2019

Для этого я использую Java.

У меня есть код 97, который представляет символ «a» ascii. Я преобразую 97 в двоичную, что дает мне 1100001 (7 бит). Я хочу преобразовать это в 12 бит, я могу добавить начальные 0 к существующим 7 битам, пока они не достигнут 12 бит, но это кажется неэффективным. Я думал о том, чтобы использовать оператор & bit wise, чтобы сделать все нули, кроме младших разрядов 97, для достижения 12 битов, возможно ли это и как это сделать?

byte buffer = (byte) (code & 0xff);

Над строкой кодане даст мне 01100001 нет?

1 Ответ

0 голосов
/ 05 октября 2019

, что дает мне 1100001 (7 бит)

Ваше значение buffer составляет 8 бит. Потому что вот что такое byte: 8 бит.

Если code имеет тип int (подробности добавлены в комментарии ниже), то это уже 32-битное число, в данном случае 25 ведущихноль бит. Вам ничего не нужно делать с этим. В нем есть все биты, о которых вы просите.

Нет целочисленного типа Java с 12 битами, и он не является непосредственно достижимым, поскольку 12 не кратно размеру байта. Непонятно, почему вы хотите ровно 12 бит. Как вы думаете, какой вред принесут дополнительные 20 нулевых битов?


Важным фактом является то, что в Java целочисленные типы (char, byte, int и т. Д.) Имеютфиксированное количество битов, определяемое спецификацией языка.

Применительно к вашему оригиналу code & 0xff - code имеет 32 бита. В общем случае эти биты могут иметь любое значение.

В вашем конкретном случае вы сказали нам, что code было 97, и поэтому мы знаем, что старшие 25 бит code были равны нулю;это следует из двоичного представления 97.

Опять же, в общем, & 0xff установит все ноль, кроме младших 8 битов. В вашем случае это не имело реального эффекта, потому что они уже были нулевыми. Нет добавленных битов - они всегда есть.

...