, что дает мне 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 битов. В вашем случае это не имело реального эффекта, потому что они уже были нулевыми. Нет добавленных битов - они всегда есть.