Странное поведение бит-сдвига с байтом в 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?

Ответы на вопрос(3)

Ваш ответ на вопрос