При использовании дополнительных кодов, построенных по первому варианту, правила счета следовало бы вообще пересмотреть в той части, в которой они касаются старшего разряда числа, так как вес этого разряда искусственно принят равным (–d0) (вместо естественного веса +d0). Однако в двоичной системе счисления (когда речь идет об одном двоичном разряде) нет разницы между сложением и вычитанием:

Поэтому и в дополнительных кодах, построенных по первому варианту, непосредственно применимы те правила счета, которые сформулированы для позиционного изображения чисел с естественными весами разрядов.
При использовании дополнительных кодов правила счета и вытекающие из них правила сложения и вычитания оказываются проще, чем при использовании прямых кодов. В то же время такие операции, как умножение и деление, проще выполняются в прямых кодах.
Поэтому при построении вычислительных машин часто используется следующий прием: нормально числа записываются прямым кодом; перед выполнением сложения или вычитания они преобразуются в дополнительный код; результат операции затем снова преобразуется в прямой код.
При преобразовании чисел из прямого кода в дополнительный или обратно главное затруднение связано с определением цифр основных разрядов для отрицательных чисел. Как указывалось, в изображении отрицательного числа х прямым кодом основные разряды числа содержат величину | х |, в изображении того же числа дополнительным кодом – величину d0 – | х | (d0 – вес знакового разряда; d0 = dB, d – вес старшего из основных разрядов, B – основание системы счисления). При переходе от прямого кода к дополнительному, как и при обратном переходе, для отрицательных чисел приходится выполнить вычитание величины, содержащейся в основных разрядах числа, из d0.
Способ, которым это делается, основан на том, что число d0 = dВ можно представить в виде
d0 = dВ = d(В – 1) + d(В – 1)/В + d(В – 1)/В 2 + ... + d(В – 1)/В m-1 + 1×d/В m-1.
Здесь d, d/В, d/В 2, ..., d/В m-1 – веса m основных разрядов числа; величина (В – 1) – старшая допустимая цифра в них, величина 1×d/В m-1 – единица младшего разряда.
Число d0 – d/В m-1 = d0(1 – В –m),
равное d(В – 1) + d(В – 1)/В + d(В – 1)/В 2 + ... + d(В – 1)/В m-1,
содержит наибольшие допустимые цифры (В – 1) во всех основных разрядах. Найти дополнение до него очень просто. Для этого нужно в каждом из основных разрядов найти дополнение от имеющейся в нем цифры до (В – 1). Затем к полученному результату достаточно добавить единицу младшего разряда (величину d/В m-1 ), чтобы получить дополнение до d0.
Пусть, например, отрицательное десятичное число (– 0,537) записано прямым кодом в виде
– .537.
Для нахождения цифр основных разрядов этого числа в дополнительном коде найдем сначала дополнение от каждой цифры до 9: .462 (эта величина – дополнение от величины .537 не до 1,000, а до 0,999); затем добавим единицу младшего разряда:

При обратном переходе на первом этапе из величины (.463) получим (.536), на втором этапе

Аналогичным образом в примере 1.17 имеем отрицательное двоичное число (– 11/16), записанное прямым кодом в виде (–.1011). При переходе к дополнительному коду цифры основных разрядов находятся в два этапа:
· сначала в каждом разряде находится дополнение от имеющейся цифры до 1; иначе говоря, каждая цифра заменяется на обратную; при этом получим (.0100), что является дополнением от исходной величины не до 1,0000, а до 0,1111;
· затем к полученному числу добавляется единица младшего разряда:

Заметим, что если первый этап преобразования является поразрядной операцией, то второй этап выполняется по обычному правилу прямого счета, так что каждая цифра результата зависит, вообще говоря, от всех младших цифр.