9.1.2. ПРЕДСТАВЛЕНИЕ ОТРИЦАТЕЛЬНЫХ ЧИСЕЛ
При цифровой обработке сигналов, как и в большинстве числовых алгоритмов, необходимо оперировать с относительными числами. Существуют три основных метода представления отрицательных чисел с фиксированной запятой. Первым и возможно наиболее известным является метод представления в прямом коде с использованием знака и величины. При этом представлении величина (которая, конечно, положительна) записывается в виде двоичного числа, а знак представляется стоящей перед ним двоичной цифрой; 0 соответствует положительному числу и 1 — отрицательному (или наоборот). Например, в прямом коде
представляет число
число —3/16.
Два других метода представления отрицательных чисел называют представлением в дополнительном и обратном кодах. Представление в дополнительном коде можно рассмотреть на основе интерпретации всех чисел в регистре как положительных. Числа с общим числом разрядов
(с одним разрядом слева от двоичной запятой и
— справа), в случае их интерпретации как положительных чисел, изменяются в диапазоне от нуля до
Половина таких чисел используется для представления положительных дробных чисел и половина — для отрицательных. А именно, положительные дробные числа представляются так же, как в прямом коде. Отрицательные дробные числа представляются путем вычитания их величины из 2,0.
Пример. Знак и величина дробного числа
имеют одинаковое представление в прямом и в дополнительном кодах. Однако рассмотрим знак и величину числа
Величиной является
(т. е. 3/8), которая затем вычитается из
(т. е. 2), образуя в результате
. Таким образом
представляется с помощью
Представление отрицательных чисел в обратном коде подобно представлению в дополнительном коде. Положительные дробные числа представляются как в прямом коде, а отрицательные — путем вычитания их величины из наибольшего числа, которое может содержать регистр (т. е. со всеми разрядами, равными единице). Таким образом, если общее количество разрядов, как и раньше,
равно
разрядов справа от двоичной запятой и один — слева), то отрицательные дробные числа представляются путем вычитания их величины из числа
Пример. Предположим, что
Положительное дробное число
представляется в обратном коде в виде
Отрицательное дробное число —3/8 имеет величину 3/8, поэтому его представление в обратном коде образуется путем вычитания
из
приводя в результате к
Следовательно, отрицательное дробное число —3/8 представляется в виде
в регистре обратного кода.
В табл. 9.1 показано сравнение трех систем представления чисел при
-разрядной длине кода. Следует заметить, что во всех трех представлениях чисел первый слева разряд является нулем для положительных дробных чисел и единицей — для отрицательных.
ТАБЛИЦА 9.1 (см. скан)
По этой причине первый стоящий слева разряд называется знаковым разрядом. В прямом коде изменение знака числа (но не его величины) повлияет только на первый стоящий слева разряд. При представлении чисел в обратном и в дополнительном кодах изменение знака числа повлияет на все разряды. В частности, можно показать, что отрицательное значение числа в обратном коде выполняется путем замены всех разрядов их сопряженными значениями. Отрицательные числа в дополнительном коде формируются путем замены всех разрядов их сопряженными значениями и суммирования с числом
(игнорируя любое переполнение в результате такого суммирования). Отметим также, что в системах с прямым и дополнительным кодами имеют представление как
так
В системах с дополнительным кодом используется представление только
не используется). Каждое из представлений имеет свои достоинства и недостатки, и выбор способа представления отрицательных чисел связан в первую очередь с особенностями аппаратурного или программного выполнения таких арифметических операций, как сложение, вычитание и умножение.
Для представления отрицательных чисел с плавающей запятой использовалось большое число методов. В этой главе принято, что отрицательные числа образуют, представляя мантиссу числом с фиксированной запятой, имеющим знак (т. е. знак числа определяется старшим разрядом мантиссы). Мантисса полагается дробным числом. Для представления такого дробного числа (с учетом его знака) можно использовать, конечно, прямой, обратный или дополнительный коды.