Можно посчитать в дополнительной двоичном коде для одного байта.
Чтобы получить отрицательное число −31, берем 1 0000 0000 и вычитаем из него 31 в двоичном виде.
31 = 16 + 8 + 4 + 2 + 1 = 0001 1111
X = −31 = 1 0000 0000 − 0001 1111 = 1111 1111 − 0001 1110 = 1110 0001
Y = 53 = 32 + 16 + 4 + 1 = 0011 0101
Складываем X + Y: .
1 1 1 0 0 0 0 1
+ 0 0 1 1 0 1 0 1
—————————————————
1 0 0 0 1 0 1 1 0 Видим переполнение байта (девять цифр вместо восьми), старший бит отбрасываем.
Результат 0001 0110 = 16 + 4 + 2 = 22 (старший бит 0, поэтому число положительное).
Проверка: −31 + 53 = 53 − 31 = 22