Поведение, которое вы получаете, связано с тем, что short
s повышается до int
s перед применением операции сдвига. Фактически, если вы присваиваете результат оператора сдвига переменной int
, вы получите ожидаемый результат:
public static void main(String[] args) {
short value = (short)0b1111111111100000;
System.out.println(value); //-32, which is the given number
int result = value >>> 5;
System.out.println(result); //134217727, which is 00000111111111111111111111111111
}
Если вы присвойте результат short
, вы получите только младшие биты .
Это связано с тем, что язык байт-кода на самом деле не работает с типами, меньшими int
.