Сложение чисел в прямом коде очень просто выполняется для чисел с одинаковыми знаками. Числа складываются, а их сумме присваивается код знака слагаемых.
Если числа имеют разные знаки, то используется операция алгебраического сложения (вычитания). Из большего по модулю числа вычитается меньшее по модулю число, их разности присваивается код знака большего по модулю числа.
Гораздо проще в этом случае использовать дополнительный код для отрицательных чисел. Тогда операция алгебраического сложения сводится к простому арифметическому сложению. Знаковый разряд и цифровая часть числа рассматриваются как единое целое. Машина оперирует с отрицательными числами, представленными в дополнительном коде, как с положительными независимо от того, целые они или дробные. Сумма также получается в дополнительном коде. Правильный знак суммы получается автоматически в процессе суммирования знаковых цифр операндов и цифры переноса из соседнего младшего разряда.
В случае возникновения единицы переноса из знакового разряда суммы ее нужно отбросить ("погасить") при сложении в дополнительном коде; прибавить к младшему разряду суммы при сложении в обратном коде (циклический перенос единицы переполнения).
Суммирование двоичных чисел происходит в соответствии с таблицей сложения, причем в каждом i-том разряде участвуют в сложении три цифры: цифра переноса из соседнего младшего разряда Pi и две цифры соответствующего разряда Ai и Bi. В результате сложения имеем сумму Si в данном i-том разряде и перенос в следующий (i+1)-ый разряд Pi+1.
Таблица 3.
Pi | Ai | Bi | Si | Pi+1 |
Пример: произвести сложение в дополнительном коде следующих пар чисел; результат представить в прямом и дополнительном кодах:
1. а) X1 = 010101 б) X1 = -(010101)
X2 = -(001001) X2 = 0010001
|
[X2] доп. = 110111
[X cум]доп. = 1001100
|
б) [X1]доп. = 101011
[X2] доп. = 001001
[X cум]доп. = 110100
[X cум]пр = 101011 + 000001 = 1 01100
Ответ: [X cум]доп. = 110100 [X cум]пр = 101100
2. а) X1 = +3В16 б) X1 = -3В
X2 = -С216 X2 = +С2
а) [X1]доп= 03В (для разрядной сетки цифровой части числа n=3)
[X2]доп= F3E
[X cум]доп = F79
Результат отрицательный, для записи его в прямом коде найдём дополнение
[[X cум]доп]доп = 1000 – F79 = 87, что даёт значение результата с обратным знаком (дополнение дополнения). При записи суммы в прямом коде необходимо восстановить знак.
В сложении участвуют целые числа, поэтому в разрядной сетке результат сложения расположен следующим образом:
зн 162 161 160
Ответ: [X cум]доп = F79; [X cум]пр = -108716; X cум = - 87
б) [Х1] доп = 1FC5
[X2] доп = 00С2
[X cум]доп = 10087
гасится
Так как знак суммы положительный, то её дополнительный код совпадает с прямым.
Ответ: Х = 8716