Seltsames Verhalten der Bitverschiebung mit Byte in Java
Wie ich Bit-Shifting aufbyte
, Ich stelle fest, dass ich bei der Verwendung der vorzeichenlosen Rechtsverschiebung >>>
). Mitint
, beide Rechtsverschiebung (Vorzeichen:>>
und ohne Vorzeichen:>>>
) verhalte dich wie erwartet:
int min1 = Integer.MIN_VALUE>>31; //min1 = -1
int min2 = Integer.MIN_VALUE>>>31; //min2 = 1
Aber wenn ich das gleiche mit @ macbyte
, seltsame Dinge passieren mit vorzeichenloser Rechtsverschiebung:
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!
Ich dachte, es könnte sein, dass der Compiler das @ konvertiebyte
zuint
intern, scheint aber nicht ganz ausreichend zu sein, um dieses Verhalten zu erklären.
Warum verhält sich Bit-Shifting mit Byte in Java so?