Представление отрицательных чисел
Один из способов выполнения операции вычитания – замена знака вычитаемого на противоположный и прибавление его к уменьшаемому:
А–В=А+(–В).
Таким образом операцию арифметического вычитания заменяют операцией алгебраического сложения, которая и становится основной операцией в ЭВМ.
Для машинного представления отрицательных чисел используют прямой, дополнительный и обратный коды. Рассмотрим применение этих кодов для чисел, представленных в форме с фиксированной запятой. Для простоты изложения в дальнейшем будут рассматриваться числа, которые по модулю меньше единицы. Это существенно упрощает вычисление масштабных коэффициентов.
Прямой код числа А=–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, b1b2...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. Если к числу A1добавить единицу в самый младший разряд, то в результате получим число –1,00...0. Преобразовав это число по формальным правилам, получим [А]д min=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.
Использование различных способов изображения отрицательных чисел в цифровом автомате обусловливает целый ряд особенностей выполнения операции алгебраического сложения двоичных чисел.
Двоичная арифметика