Я сейчас пишу персональный проект на Java и недавно впервые использовал битовые операции.Я пытался преобразовать два байта в короткий, один из которых был старшими 8 битами, а другой - младшими 8 битами.
Я столкнулся с ошибкой при запуске первой строки кода ниже.
Неверные результаты
short regPair = (short) ( (byte1 << 8) + (byte2) );
Правильные результаты
short regPair = (short) ( (byte1 << 8) + (byte2 & 0xFF) );
Ожидаемые результаты: AAAAAAAABBBBBBBB
, где A
представляет биты из byte1
и B
представляетбиты из byte2
.
Используя 1-ю строку кода, я получу типичное добавление между сдвинутым в битах байтом 1 и добавленным в него байтом 2.
Пример неправильных результатов
byte1 = 11, byte2 = -72
result = 2816 -72
= 2744
При использовании строки кода, которая дает ожидаемые результаты, я могу получить правильный ответ 3000. Мне интересно, почему для byte2
необходима битовая маскировка.Я думаю, что перед добавлением он преобразует byte2
в двоичный файл, а затем выполняет двоичное добавление с обоими байтами.