Вычислим теперь разность указанных выше чисел как
126 - 122= 126 + (256 - 122) - 256,
где 256 = 100000000 =М, то есть емкости 8-ми разрядной сетки.
Выражение в скобках (256 – 122) называется дополнением отрицательного двоичного числа до М, а численное значение разности 134 = 10000110 дополнительным кодом отрицательного двоичного числа –122(10).
Видно, что, как и в случае обратного кода, знак кодируется единицей для отрицательного числа и нулем для положительного.
Примечание: хотя для прямого кода знак может кодироваться произвольно, но по аналогии с обратным и дополнительным кодами и для него применяется то же кодирование.
Выполним вычисление 126 + 134 – 256, представив числа в двоичных кодах:
Так как выделенный разряд результата выпадает из 8-ми разрядной сетки, то он уменьшает его как раз на нужное нам число 256 (вес девятого разряда), следовательно, первая полученная сумма является окончательным результатом.
Поскольку 256 = 255 + 1, то дополнительный код удобно получать из обратного прибавлением к последнему единицы в младший разряд (это арифметическая операция, а не поразрядная). Дополнительный код отрицательного двоичного числа можно получить из прямого кода и по следующему правилу: установить в знаковый разряд 1, а остальные цифры прямого кода необходимо последовательно слева направо инвертировать до последней единицы, не включая ее, последнюю правую единицу и следующие за ней справа нули оставить без изменения (см. рис. 1, г).
Достоинства дополнительного кода: простота его получения; легко осуществляется сложение чисел с разными знаками, так как не требуется реализовывать циклический перенос; отрицательных чисел на одно больше, чем положительных; как и для обратного кода знаковый разряд и цифровую часть числа можно рассматривать как единое целое, причем веса числовых разрядов положительные и равны 2i, а вес знакового разряда отрицательный и равен 2n–1; нуль имеет единственное представление как положительный +0 = 00000000.
В силу своих достоинств дополнительный код в настоящее время используется наиболее часто.
Недостаток дополнительного кода: процедура его получения более сложная, чем для обратного кода.
В общем случае представление дополнительного кода вn-разрядной сетке определяется как:
где С - емкость разрядной сетки (С = 2n для целых чисел и С = 2 для правильных дробей).
Примечание.Часто обратный код называют дополнением до1 (имеется в виду поразрядное дополнение (инверсия)), а дополнительный код дополнением до2 ( это справедливо только для правильной дроби (см. [3]).
Кроме указанных трех основных числовых кодов для представления чисел со знаком, применяется еще смещенный код. Он широко используется в АЦП и ЦАП, а также для представления целых чисел, задающих порядок чисел, представленных в форме с плавающей запятой [6]. Диапазон представляемых чисел такой же, как и у дополнительного кода. Единица в знаковом разряде смещенного кода указывает на представление положительного числа, нуль - отрицательного. Цифровые разряды смещенного кода для положительного числа представляют модуль этого числа, для отрицательного - поразрядную инверсию модуля с арифметическим сложением с единицей (см. рис. 1, д).
Существует простое правило перехода к смещенному коду от дополнительного (и обратно): для перехода необходимо инвертировать знаковый разряд.
Достоинством смещенного кода является то, что из Х1см > Х2см следует Х1 > Х2, что упрощает сравнение чисел со знаком, например порядков чисел, представленных в форме с плавающей запятой.
В общем случае представление смещенного кода в n-разрядной сетке определяется как:
Хсм = А + Х (4)
или, что тоже самое
где А (смещение) - величина, равная весу старшего разряда сетки (А = 2n–1 для целых чисел). Диапазон представления чисел: положительных 0 ≤ Х ≤ А-1;
отрицательных 1≤ |Х| ≤ А.
Сейчас для представления порядков чисел с плавающей запятой стал применяться смещенный код с отрицательным нулем [4; 6] (см. рис. 1, е).
Х′см = А – 1+ Х (6)
или, что то же самое
Диапазон представляемых чисел здесь другой: для положительных 1≤ Х ≤ А,
а для отрицательных 0 ≤ |Х| ≤ А-1.
Все рассмотренные коды компактно представлены на рис. 2 применительно к использованию их в ЦАП. По оси x представлены десятичные эквиваленты четырехразрядного конкретного кода (b3, b2, b1, b0), рассматриваемого как число без знака, а по оси y соответствующие ему числа со знаком, представленные выходным напряжением ЦАП. Из рис. 2 хорошо видно, что конкретная интерпретация числового кода определяется аппаратной реализацией операционного блока.
Рис. 2. Числовые коды в четырёхразрядных ЦАП.