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

В ЭВМ используется прямой, обратный и дополнительный коды чисел. Знак “+” кодируется нулем (0), “-” - единицей (1), которые записываются в дополнительном старшем разряде - знаковом разряде.

Возьмем целое число С = + Cn Cn-1 Cn-2...C1 C0.

  1. Прямой код для целых чисел определяется:

Для отрицательных двоичных чисел имеем:

C = 2 +ç-Cn Cn-1...C0 ç= 1.Cn Cn-1...C0,

где точкой отделен знаковый разряд.

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

C = +10110, Cпр = 0.10110;

C = -10110,

Cпр = 1.10110.

Сложение в прямом коде не вызывает затруднений, когда у слагаемых одинаковые знаки: сложить модули и сумме присвоить знак слагаемых. При вычитании чисел в прямом коде нужно сначала определить больший модуль, от него отнять меньший и результату присвоить знак большего модуля.

2. Обратный код определяется:

Для отрицательных двоичных чисел имеем:

Cобр = 2n+2 - 1 -ç-Cn Cn-1 …C0ç = 11…1 – 0.Cn Cn-1…C0= 1.n n-10,

где I = 1 при Ci = 0 и I = 0 при Ci = 1.

Таким образом, для представления чисел в обратном коде надо в знаковый разряд записать 0 или 1, для отрицательных чисел в значащие разряды нужно записать дополнение модуля исходного числа до наибольшего числа без знака, помещающегося в данных разрядах. Для двоичной системы счисления последнее означает, что в случае отрицательных чисел для получения обратного кода надо значение разрядов инвертировать: вместо 0 записать 1,вместо 1 – 0.

C = +10110, Cобр = 0.10110; С = -10110, Собр = 1.01001.

  1. Дополнительный код чисел определяется:

При представлении двоичного отрицательного числа в дополнительном коде в знаковый разряд надо записать 1, а цифровую часть заменить дополнением числа до 2n+1 .

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

Cдоп = Собр +1, при С < 0.

C = +10110, Cдоп = 0.10110; С = -10110, Сдоп = 1.01010.

Как можно увидеть, при вычислениях в ЭВМ в прямом и обратном коде может получиться как положительный, так и отрицательный нуль (+0, -0).

(+0)пр=0,00…0, (-0)пр=1,00..0;

(+0)обр=0,00…0, (-0)обр=1,11…1.

И только в дополнительном коде нуль представляется однозначно:

(+0)доп = 0,00…0, (-0)доп = 1,11…1+2-m = 0.

Нетрудно доказать, что (по модулю):

  • Обратный код от обратного кода дает прямой код числа.
  • Дополнительный код от дополнительного кода дает прямой код числа.

Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: