Один из способов выполнения операции вычитания – замена знака вычитаемого на противоположный и прибавление его к уменьшаемому:
А – В = А +(– В).
Таким образом операцию арифметического вычитания заменяют операцией алгебраического сложения, которая и становится основной операцией в ЭВМ.
Для машинного представления отрицательных чисел используют прямой, дополнительный и обратный коды. Рассмотрим применение этих кодов для чисел, представленных в форме с фиксированной запятой. Для простоты изложения в дальнейшем будут рассматриваться числа, которые по модулю меньше единицы. Это существенно упрощает вычисление масштабных коэффициентов.
Прямой код числа А =–0, а 1 а 2... аn – машинное изображение этого числа в виде [ А ]пр=1, а 1 а 2... аn. Из определения следует, что в прямом коде все цифровые разряды отрицательного числа остаются неизменными, а в знаковой части записывается единица. Например, если А =–0,101110, то [ А ]пр=1,101110. Положительное число в прямом коде не меняет своего изображения. Например, если А =0,110101,то [ А ]пр=0,110101.
В прямом коде в разрядную сетку цифрового автомата можно записать следующее максимальное по абсолютному значению число А пр max=0,11...1=1–2- n, где n – количество разрядов разрядной сетки цифрового автомата.
Диапазон изменения машинных изображений для прямого кода лежит в пределах
Ранее прямой код был использован для записи чисел в разрядной сетке цифрового автомата.
Правила преобразования чисел в прямой код можно сформулировать так:
Дополнительный код числа А =–0, а 1 а 2... аn – такое машинное изображение этого числа [ А ]д=1, b 1 b 2... bn, для которого bi = 0 при а i = 1, и bi = 1 при ai = 0, за исключением последнего значащего разряда, для которого bk =1 при ak =1. Например, число А =–0,101110 запишется в дополнительном коде так: [ А ]д= 1,010010.
Дополнительный код является математическим дополнением основания системы счисления:
(2.4)
где | А | – абсолютное значение числа А.
Так как положительные числа не меняют своего изображения в дополнительном коде, то правила преобразования в дополнительный код можно записать следующим образом:
Максимальное дополнительное число, представляемое при этом, равно (1–2- n).
Наибольшее отрицательное число, которое можно записать в дополнительном коде, определим следующим образом. Предположим, что наибольшее отрицательное число А 1=–0,11...11. Тогда изображение этого числа в дополнительном коде [ А 1]д=1,00...01. Если к числу A 1добавить единицу в самый младший разряд, то в результате получим число –1,00...0. Преобразовав это число по формальным правилам, получим [ А ]д m i n=1,00...0.
Следовательно, диапазон изменения машинных изображений чисел для формы представления с запятой, фиксированной перед старшим разрядом, в дополнительном коде
–1 | А |д (1 – 2- n).
Машинные изображения чисел – всегда целые числа. При этом наибольшее положительное число состоит из целой части, все разряды которой равны единице, и знакового разряда, равного нулю (например, в случае 16 двоичных разрядов (два байта) максимальное положительное число имеет вид 0111111111111111, т. е. равно 215–1); наибольшее отрицательное число состоит из целой части, все разряды которой равны нулю, и знакового разряда, равного единице, т. е. имеет вид 1000000000000000. В этом случае говорят о форме представления чисел с фиксированной точкой. Таким образом, соотношение (2.4) для представления целых чисел в дополнительном коде принимает вид
(2.5)
где k – количество разрядов в целой части машинного изображения числа. Формула (2.4) – частный случай формулы (2.5) при k = 0.
Обратный код числа А =–0, а 1 а 2... аn —такое машинное изображение этого числа [ А ]об=1, с 1 с 2… сn, для которого сi =0, если Ai =1, и ci =1, если аi = 0. Из определения следует, что обратный код двоичного числа является инверсным изображением самого числа, в котором все разряды исходного числа принимают инверсное (обратное) значение, т. е. все нули заменяются на единицы, а все единицы – на нули. Например, если А =–0,101110, то [ А ]об=1,010001. Для обратного кода чисел, представленных в форме запятой, фиксированной перед старшим разрядом, справедливо соотношение
(2.6)
где | А | – абсолютная величина А; n – количество разрядов после запятой в изображении числа.
Правила преобразования чисел в обратный код можно сформулировать следующим образом:
Сравнив выражения (2.4) и (2.6), видим, что
(2.7)
Соотношение (2.7) используют для получения дополнительного кода отрицательных чисел следующим образом: сначала инвертируется цифровая часть исходного числа, в результате получается его обратный код; затем добавляется единица в младший разряд цифровой части числа и тем самым получается дополнительный код этого изображения.
Пример. Найти обратный и дополнительный коды числа А = –0,1110002.
Решение. Используя определение обратного кода, получим [ А ]об=1,000111.
Для нахождения дополнительного кода числа добавим единицу в младший разряд его изображения:
Ответ: [ А ]об=1,000111; [ А ]д=1,001000.
В обратном коде можно изображать максимальное положительное число [ A ]обmax=0,11…1=1–2- n и наибольшее отрицательное число [ А ]обmin=–0,11…1=–(1–2- n), записываемое в виде 1,00…0.
При проектировании цифровых автоматов необходимо учитывать неоднозначное изображение нуля в обратном коде: +0 изображается 0,00…0, –0 изображается 1,11…1.
Использование различных способов изображения отрицательных чисел в цифровом автомате обусловливает целый ряд особенностей выполнения операции алгебраического сложения двоичных чисел.
Двоичная арифметика