Дополнительный код (ДК) строится следующим образом. Сначала формируется обратный код (ОК), а затем к младшему разряду (МЗР) добавляют 1. При выполнении арифметических операций положительные числа представляются в прямом коде (ПК), а отрицательные числа - в ДК, причем обратный перевод ДК в ПК осуществляется аналогичными операциями в той же последовательности. На рис. 2.3 рассмотрена цепь преобразований числа из ПК в ДК и обратно в двух вариантах.

Рис. 1.3. Два варианта преобразования чисел из ПК в ДК и обратно
Пример:
Число -5(10) перевести в ДК и обратно (первый вариант).

Пример:
Число -5(10) перевести в ДК и обратно (второй вариант).

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

Пример:
Перевести в ДК модуль числа -44.

Как видно из примеров, результаты, полученные при преобразовании обоими методами, совпадают.
1000 





