Сложение чисел в форме с фиксированной запятой

 

Сложение чисел в прямом коде очень просто выполняется для чисел с одинаковыми знаками. Числа складываются, а их сумме присваивается код знака слагаемых.

Если числа имеют разные знаки, то используется операция алгебраического сложения (вычитания). Из большего по модулю числа вычитается меньшее по модулю число, их разности присваивается код знака большего по модулю числа.

Гораздо проще в этом случае использовать дополнительный код для отрицательных чисел. Тогда операция алгебраического сложения сводится к простому арифметическому сложению. Знаковый разряд и цифровая часть числа рассматриваются как единое целое. Машина оперирует с отрицательными числами, представленными в дополнительном коде, как с положительными независимо от того, целые они или дробные. Сумма также получается в дополнительном коде. Правильный знак суммы получается автоматически в процессе суммирования знаковых цифр операндов и цифры переноса из соседнего младшего разряда.

В случае возникновения единицы переноса из знакового разряда суммы ее нужно отбросить ("погасить") при сложении в дополнительном коде; прибавить к младшему разряду суммы при сложении в обратном коде (циклический перенос единицы переполнения ).

Суммирование двоичных чисел происходит в соответствии с таблицей сложения, причем в каждом 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

Так как знак суммы положительный, то дополнительный код совпадает с прямым. Ответ: X cум = 0.01100  
а) [X1]доп. = 010101

[X2] доп. = 110111

[X cум]доп. = 1001100

Так как знак суммы отрицательный, а сумма представлена в дополнительном коде, найдём прямой код результата 0.01100  
гасится

б) [X1]доп. = 101011

[X2] доп. = 001001

[X cум]доп. = 110100

 

[X cум]пр = 101011 + 000001 = 101100

Ответ: [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