Чтобы понять, как это работает, нам нужно знать, что компьютеры работают в битах.
132 в base 10 (десятичный) является 10000100
в базе 2 (двоичный). Поскольку Java хранит int
в 32 битах, мы имеем
00000000_00000000_00000000_10000100
Когда int
преобразуется в byte
, Java прерывает левый почти 24 бит. Мы получаем 10000100
.
В дополнение двух в качестве знака используется самый левый бит. Если самый левый бит 0
, ничего больше не будет сделано.
Если самый левый бит - 1
(как здесь, здесь), это означает, что число отрицательно и требуется больше работы. Чтобы получить величину, мы минус один, затем применим одно дополнение (применяем одно дополнение, чтобы инвертировать биты):
10000100
- 1 = 10000011
10000011
= 01111100
01111100
при интерпретации десятичного числа равна 124.
Итак, мы имеем отрицательный число с величиной 124, что дает нам -124.