Дополнительный код
Дополнительный код (ДК) строится следующим образом. Сначала формируется обратный код (ОК), а затем к младшему разряду (МЗР) добавляют 1. При выполнении арифметических операций положительные числа представляются в прямом коде (ПК), а отрицательные числа – в ДК, причем обратный перевод ДК в ПК осуществляется аналогичными операциями в той же последовательности. На рис. 2.3 рассмотрена цепь преобразований числа из ПК в ДК и обратно в двух вариантах.
Пример.
Число -5(10) перевести в ДК и обратно (первый вариант).
Пример.
Число -5(10) перевести в ДК и обратно (второй вариант).
Использование ДК для представления отрицательных чисел устраняет двусмысленное представление нулевого результата (наличие двух нулей: +0 и -0), так как -0 исчезает.
В общем случае использованием ДК для записи отрицательных чисел можно перекрыть диапазон десятичных чисел от -2k-1
до +2k-1-1, где k – число используемых двоичных разрядов, включая знаковый. Так, с помощью одного байта можно представить десятичные числа от -128 до +127 либо только положительные числа от 0 до 255 (здесь под положительными числами понимаются числа без знака). В табл.2.1 приведены 4-разрядные двоичные числа от 0000 до 1111 и десятичные числа для представления их со знаком и без знака. Из этой таблицы следует, что в формате 4-разрядного двоичного числа могут быть представлены десятичные числа со знаком в диапазоне от -8 до +7 или десятичные числа без знака в диапазоне от 0 до +15.
Оба способа представления чисел широко используются в ЭВМ.
Таблица 2.1
Представление десятичных чисел одним полубайтом
4 - разрядное
двоичное число | Десятичные эквиваленты двоичного числа со знаком | Десятичные эквиваленты двоичного числа без знака | |||
0000 | +0 | 0 | |||
0001 | +1 | 1 | |||
. . . . ПК | . . . | . . . | |||
0110 | +6 | 6 | |||
0111 | +7 | 7 | |||
1000 | -8 | 8 | |||
1001 | -7 | 9 | |||
1010 | -6 | 10 | |||
. . . . ДК | . . . | . . . | |||
1110 | -2 | 14 | |||
1111 | -1 | 15 |
В ЭВМ используется быстрый способ формирования ДК.При этом двоичное число просматривается от МЗР к СЗР. Пока встречаются нули, их копируют в разряды результата. Первая встретившаяся единица также копируется в соответствующий разряд, а каждый последующий бит исходного числа заменяется на противоположный (0 на 1, 1 на 0).
Пример.
Число -44(10) (10101100
(2)) перевести в ДК и обратно.
Проверка:
Пример.
Перевести в ДК модуль числа -44.
Видно, что результаты преобразований обоими методами совпадают.