Есть ряд чисел с типом 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) не хочу так. Хочу с байтом.
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).
Т.е. да. Сначала все байты конвертятся в инты и без маски не выйдет.