Рассмотрим пример сложения чисел с разными знаками, используя описанную выше модель представления чисел. Где старший разряд регистра указывает знак числа (ноль для положительного, единица для отрицательного) , а само отрицательное число представляется в дополнительном коде. Сложим, для примера, восьмиразрядные числа "21" (двадцать один) и "-30" (минус тридцать).
Переведем их модули в двоичную систему счисления и запишем в 8-ми разрядные регистры. 2110 = 101012 ; 3010 = 111102
Разр.
Разр.
Чтобы получить число противоположное, по знаку, числу "30" возьмем от последнего дополнительный код. Сначала получим обратный код, инвертируя все разряды числа.
Разр.
30обр
Теперь прибавим единицу и получим дополнительный код.
Разр.
c
30обр
+
30доп
Мы получили машинное представление числа "-30" (минус тридцать), теперь сложим эти числа (21 и -30).
Разр.
c
30доп
C
Проанализируем полученный результат. Мы видим, что в старшем (знаковом) разряде результата содержится единица, следовательно, результат есть число отрицательное и поэтому представлено оно в дополнительном коде. Значение этого числа сразу неочевидно и чтобы понять, что это за число, нам необходимо узнать его модуль.
Из курса школьной математики известно, что модуль положительного числа есть само число, а модуль отрицательного числа есть число ему противоположное. Поэтому нам нужно получить число противоположное результату, а это мы уже знаем как сделать, нужно взять от него дополнительный код.
Проделаем это по известной схеме - проинвертируем каждый разряд C = 11110111 и получим Ci = 00001000. Теперь прибавим единицу.
Разр.
c
Сi
+
Ну вот, модуль числа результата есть "9" (девять), а сам результат соответственно "-9", что конечно же является правильным решением поставленной задачи: 21+(-30)= -9.
Рассмотрим еще пример на сложение, вычислим "-30" (минус тридцать) плюс "40" (сорок) . Код для числа "-30" у нас уже есть, а число "40" в двоичной системе есть "101000". Так как оно положительное , то запишем его в прямом 8-ми разрядном коде и прибавим к коду числа "-30".
Разр.
c
30доп
Анализируя результат, мы видим, что старший знаковый разряд равен нулю, следовательно, результат есть число положительное и значит представлено оно в прямом коде, т.е. десять, что опять-таки является правильным решением поставленной задачи: -30+40= 10.