Использование дополнения до двух для представления отрицательных значений имеет то преимущество, что вычитание и сложение одинаковы.В вашем случае вы можете думать о 12 - 7
как 12 + (-7)
.Следовательно, вам нужно только найти представление дополнения до -7 и добавить его к +12:
12 001100
-7 111001 -- to get this, invert all bits of 7 (000111) and add 1
----------
5 1000101
Затем отбросить перенос (указывает на переполнение), и вы получите свой результат: 000101
, который равен5, как и ожидалось.
Для вашего примера -15 + 2
просто следуйте той же процедуре, чтобы получить представление дополнения до -15:
15 001111
110000 -- inverted bits
110001 -- add 1
Теперь выполните сложение как обычно:1013 *
-15 110001
2 000010
-----------
res 110011
Чтобы увидеть, что res
действительно равен -13, вы можете видеть, что он отрицательный (установлен MSB).Для получения величины преобразуйте в положительное значение (инвертируйте биты, добавьте 1):
res 110011
001100 -- inverted bits
001101 -- add 1
Следовательно, ожидаемая величина равна 13.