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?

Antworten auf die Frage(6)

Ihre Antwort auf die Frage