Можете даже не читать то, что внизу (однако стоит), достаточно изучить пределы типов данных.
Пределы byte: от -128 до 127. float будет равен 128.50. Допустим 128, так как при приведении дробная часть отбрасывается. А так, как 128 больше 127 (не помещается в byte), то оно перескакивает со 127 на -128. В общем, если вы выходите за плюсовой предел, то возвращаетесь на начало минусовых значений, такая бесконечная цепочка. Вот у вас число 128 = 127 + 1. Сначала 127 - все окей, помещается в byte. 127 + 1, опа, не влазит, значит начинаем с начала (-128).
Так эта штука работает:
Число 128 в двоичном коде - 1000 0000
Соответственно, если переменная int (4 байта), то 00000000 00000000 00000000 10000000.
При сужении типа до byte (1 байт) - 3 старших байта отбрасываются, остаётся 10000000.
Старший разряд используется для определения знака числа (+ или -). Конкретно, если там "1" - значит число отрицательное.
Иными словами 1000 0000, т.е. "отрицательная" 1 и ещё семь 0 - это Byte.MIN_VALUE, т.е. -128.
Вот здесь человек доступно излагает:
https://javarush.com/help/40876