Странное поведение бит-сдвига с байтом в Java
Как я использовал бит-сдвиг наbyte
Я заметил странные результаты при использовании беззнакового правого сдвига (>>>
). Сint
Сдвиг вправо (подписано:>>
и без знака:>>>
) вести себя как положено:
int min1 = Integer.MIN_VALUE>>31; //min1 = -1
int min2 = Integer.MIN_VALUE>>>31; //min2 = 1
Но когда я делаю то же самое сbyte
, странные вещи случаются с беззнаковым правым сдвигом:
byte b1 = Byte.MIN_VALUE; //b1 = -128
b1 >>= 7; //b1 = -1
byte b2 = Byte.MIN_VALUE; //b2 = -128
b2 >>>= 7; //b2 = -1; NOT 1!
b2 >>>= 8; //b2 = -1; NOT 0!
Я подумал, что это может быть, что компилятор преобразуетbyte
вint
внутренне, но не кажется достаточно достаточным, чтобы объяснить это поведение.
Почему битовое смещение ведет себя таким образом с байтом в Java?