Обратный код (также инверсный код; ) — метод вычислительной математики, позволяющий вычесть одно число из другого, используя только операцию сложения над натуральными числами. Ранее метод использовался в механических калькуляторах (арифмометрах). Многие ранние компьютеры, включая 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.
См. также Прямой код Дополнительный код Целый тип
Примечания
Литература
Категория:Информатика Категория:Системы счисления Категория:Компьютерная арифметика