Прямой, обратный и дополнительный коды : отрицательные числа

Прямой, обратный и дополнительный коды

Очень часто в вычислениях должны использоваться не только положительные, но и отрицательные числа.

Число со знаком в вычислительной технике представляется путем представления старшего разряда числа в качестве знакового.

Принято считать, что 0 в знаковом разряде означает знак «плюс» для данного числа, а 1 – знак «минус».

Число со знаком в 8-битной разрядной сетке

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

Применение дополнительного кода позволяет выполнить операцию алгебраического суммирования и вычитания на обычном сумматоре. При этом не требуется определения модуля и знака числа.

Прямой код представляет собой одинаковое представление значимой части числа для положительных и отрицательных чисел и отличается только знаковым битом. В прямом коде число 0 имеет два представления «+0» и «–0».

Обратный код для положительных чисел имеет тот же вид, что и прямой код, а для отрицательных чисел образуется из прямого кода положительного числа путем инвертирования всех значащих разрядов прямого кода. В обратном коде число 0 также имеет два представления «+0» и «–0».

Дополнительный код для положительных чисел имеет тот же вид, что и прямой код, а для отрицательных чисел образуется путем прибавления 1 к обратному коду. Добавление 1 к обратному коду числа 0 дает единое представление числа 0 в дополнительном коде. Однако это приводит к асимметрии диапазонов представления чисел относительно нуля.

Так, в восьмиразрядном представлении диапазон изменения чисел с учетом знака.

-128 <= x <= 127.

Таблица прямого, обратного и дополнительного кода 4-битных чисел. Для наглядности представления всего диапазона чисел примем, что сетка представления чисел 4-разрядная, где старший разряд (3) — знаковый, а 0-2 разряды содержат значение числа.
Число Прямой код Обратный код Дополнительный код
-8 1000
-7 1111 1000 1001
-6 1110 1001 1010
-5 1101 1010 1011
-4 1100 1011 1100
-3 1011 1100 1101
-2 1010 1101 1110
-1 1001 1110 1111
0
0
1000
0000
1111
0000
0000
1 0001 0001 0001
2 0010 0010 0010
3 0011 0011 0011
4 0100 0100 0100
5 0101 0101 0101
6 0110 0110 0110
7 0111 0111 0111

Сложение и вычитание чисел со знаком в дополнительном коде

Если оба числа имеют n–разрядное представление, то алгебраическая сумма будет получена по правилам двоичного сложения (включая знаковый разряд). При этом возможный перенос из старшего разряда отбрасывается. Если числа принадлежат диапазону представимых данных и имеют разные знаки, то сумма всегда будет лежать в этом диапазоне. Переполнение может иметь место, если оба cлагаемых имеют одинаковые знаки.

Пример 1: 6 – 4 = ?

6 – положительное число, имеющее код 000001102 в 8-разрядной сетке.

-4 — отрицательное число, имеющее дополнительный код в 8-разрядной сетке 111111002

6-4 в дополнительном коде

Перенос старшего разряда игнорируется. Получаем: 6 – 4 = 2.

Пример 2: Вычислить –5 + 2 = ?

2 – положительное число с кодом в 8-разрядной сетке 00000010

-5 – отрицательное число с дополнительным кодом в 8-разрядной сетке 11111011

-5+2 в дополнительном коде

Число с кодом 11111101 является отрицательным. Чтобы найти модуль этого числа, отнимаем от него 1 и инвертируем все разряды. Получаем

000000112 = 310.

Прокрутить вверх