Арифметические действия над целыми числами
Обратный и дополнительный коды применяются особенно широко, так как позволяют упростить конструкцию арифметико-логического устройства (АЛУ) компьютера путем замены некоторых арифметических операций сложением.
Обычно десятичные числа при вводе в машину автоматически преобразуются в двоичный код (целые без знака), обратный или дополнительный код (целые со знаком) и в таком виде хранятся, перемещаются и участвуют в операциях. При выводе результатов из машины происходит обратное преобразование в десятичные числа.
Сложение и вычитание чисел без знака
Сложение и вычитание беззнаковых чисел происходит по обычным для позиционных систем счисления алгоритмам.
Пример
Ситуации, когда уменьшаемое меньше вычитаемого или когда результат суммы не умещается в отведенное количество разрядов, считаются ошибочными и должны отслеживаться устройством компьютера. Реакция на такие ошибки может быть различной в разных типах компьютеров.
Сложение и вычитание чисел со знаком в обратном коде
Сложение в обратном коде происходит следующим образом: по обычному алгоритму складываются все разряды, включая знаковый. Результат такого сложения для k-разрядных наборов имеет длину k +1 (самый левый разряд результата равен единице, если был перенос при сложении старших разрядов операндов, иначе – нулю).
Значение левого k +1-го разряда добавляется к младшему разряду результата. Получаем k-разрядный набор, который и будет суммой двух чисел в обратном коде.
Пример
Вычитание чисел в обратном коде x – y сводится к сложению x+(–y).
Сложение и вычитание чисел со знаком в дополнительном коде
В дополнительном коде сложение происходит так:
- по обычному алгоритму складываются все разряды, включая знаковый;
- единица переноса в k +1 разряд отбрасывается (т.е. сложение по модулю 2k)
Пример
При вычитании тоже действует обычный алгоритм, причем если уменьшаемое меньше вычитаемого, к двоичному коду уменьшаемого слева приписывается единица (т.е. добавляется 2k) и только после этого производится вычитание (такой способ называется вычитание по модулю 2k).
Пример
Умножение и деление
Во многих компьютерах умножение производится как последовательность сложений и сдвигов. Для этого в АЛУ имеется регистр, называемый накапливающим сумматором, который до начала выполнения операции содержит число ноль. В процессе выполнения операции в нем поочередно размещаются множимое и результаты промежуточных сложений, а по завершении операции — окончательный результат. Другой регистр АЛУ, участвующий в выполнении этой операции, вначале содержит множитель. Затем по мере выполнения сложений содержащееся в нем число уменьшается, пока не достигнет нулевого значения.
Деление для компьютера является трудной операцией. Обычно оно реализуется путем многократного прибавления к делимому дополнительного кода делителя.