xztau
@xztau
Я

Как работать с байтами при операциях сдвига?

Есть ряд чисел с типом byte
32 0х20
64 0х40
96 0х60
-128 0х80
-96 0хА0
-64 0хС0
-32 0хЕ0

Мне нужен результат операции сдвига без знака на 5 разрядов т.е.
byte b1 = (byte) 32;
b1 >>> 5;
с положительными числами всё путём, получаем 1,2,3 а вот дальше фигня: byte 134217724, 134217725, 134217726, 134217727.
Правильно ли я понял, что виртуозная машина сначала приводит эти значения в 4х байтовые и только потом сдвигает.
Как сделать так чтобы сдвигалось сразу? т.е. 0хА0 (1010 000) в 0х05 (0000 0101)?

P.S. (b1 & 0x00FF) >>> 5) не хочу так. Хочу с байтом.
  • Вопрос задан
  • 136 просмотров
Решения вопроса 1
@bimeg
JLS 15.19. Shift Operators
Unary numeric promotion (§5.6.1) is performed on each operand separately.

JLS 5.6.1. Unary Numeric Promotion
Otherwise, if the operand is of compile-time type byte, short, or char, it is promoted to a value of type int by a widening primitive conversion (§5.1.2).

Т.е. да. Сначала все байты конвертятся в инты и без маски не выйдет.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы