Обратный код (также инверсный код; ) — метод вычислительной математики, позволяющий вычесть одно число из другого, используя только операцию сложения над натуральными числами. Ранее метод использовался в механических калькуляторах (арифмометрах). Многие ранние компьютеры, включая CDC 6600, , PDP-1 и , использовали обратный код. Большинство современных компьютеров использует дополнительный код.

Описание Прямой n-разрядный двоичный код положительного целого числа состоит из одноразрядного кода знака (двоичной цифры 0, обозначающей знак «+»), за которым следует двоичное представление числа. Обратный код положительного числа совпадает с прямым.

Пример. Двоичное представление числа 5 — 101. В 10-разрядном коде число +5 записывается как .

Обратный код отрицательного целого числа состоит из одноразрядного кода знака (двоичной цифры 1, обозначающей знак «−»), за которым следует инвертированное двоичное представление модуля числа. Для изменения знака числа достаточно инвертировать все его разряды, включая знаковый.

Пример. Инвертирование всех разрядов 10-разрядного кода числа +5 () даёт обратный код числа −5: .

Для преобразования отрицательного числа в положительное применяется та же операция инвертирования. Этим и удобен обратный код. Его недостаток — наличие двух представлений числа 0: «положительного нуля» и «отрицательного нуля» (приведены 10-разрядные обратные коды). Это несколько усложняет операцию суммирования, поэтому впоследствии для записи целых чисел со знаком стали использовать дополнительный код.

С помощью n-разрядного обратного кода можно представить целые числа от до , а с помощью дополнительного — от −2n−1 до .

Двоичный пример Метод дополнений в основном используется в двоичной системе счисления (с основанием 2). В ней обратный код отрицательного числа очень просто получается инверсией каждого бита кода его модуля (заменой «0» на «1» и наоборот), а дополнительный код — прибавлением единицы к младшему значащему разряду (биту) обратного кодаЖуков К. Г. 1.2. Понятие прямого, обратного и дополнительного кодов // Справочное руководство пользователя Fixed-Point Blockset. . Например, рассмотрим вычитание двух целых чисел: 10010 − 2210. Каждое число записывается 8-битовым кодом, при этом старший (8-й) разряд считается знаковым.

0110 01002 (x = 10010) − 0001 01102 (y = 2210)

По методу дополнений это вычитание заменяется сложением:

0110 01002 (x) + 1110 10012 (обратный код числа −y) + 12 (для получения дополнительного кода числа −y) ———————————— 1 0100 11102

После отбрасывания девятого (старшего, крайнего левого) бита получается ответ: , то есть положительное число 7810.

См. также Прямой код Дополнительный код Целый тип

Примечания

Литература

Категория:Информатика Категория:Системы счисления Категория:Компьютерная арифметика