Comportamiento extraño de desplazamiento de bits con byte en Java

Como estaba usando bit-shift enbyte, Noté que obtenía resultados extraños al usar el desplazamiento a la derecha sin signo (>>>) Conint, ambos desplazamiento a la derecha (firmado:>> y sin firmar:>>>) comportarse como se esperaba:

    int min1 = Integer.MIN_VALUE>>31; //min1 = -1
    int min2 = Integer.MIN_VALUE>>>31; //min2 = 1

Pero cuando hago lo mismo conbyte, cosas extrañas suceden con el desplazamiento a la derecha sin firmar:

    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!

Pensé que podría ser que el compilador está convirtiendo elbyte aint internamente, pero no parece suficiente para explicar ese comportamiento.

¿Por qué el desplazamiento de bits se comporta así con byte en Java?

Respuestas a la pregunta(3)

Su respuesta a la pregunta