Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика часть 1.doc
Скачиваний:
56
Добавлен:
22.02.2015
Размер:
1.74 Mб
Скачать

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

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

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

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

Cпр= │C│ при C > 0,

Pn+1 +│C│ при C < 0 .

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

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

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

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

C = +10110, Cпр = 0.10110; C = -10110, Cпр = 1.10110.

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

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

Cобр= │C│ при C > 0,

Pn+2-P0-│C│ при C < 0 .

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

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. Дополнительный код чисел определяется:

Cдоп = │C│ при C > 0,

Pn+2 -│C│ при C < 0 .

При представлении двоичного отрицательного числа в дополнительном коде в знаковый разряд надо записать 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.

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

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

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

3.4.1. Сложение чисел в прямом и дополнительном коде

Можно строго математически доказать следующие правила.

Правило 1. При сложении дополнительных кодов чисел знаковые разряды складываются аналогично остальным, перенос из знакового разряда теряется, результат получается в дополнительном коде.

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

Таким образом, применение обратного и дополнительного кода упрощает алгебраическое сложение. Сложение чисел с разными знаками заменяется сложением их соответствующих кодов, знак при этом получается автоматически.

Пример 3.14

1. X = 0,0101, Y = -0,0011

Xдоп = 0,0101, Yдоп = 1,1101

Xдоп + Yдоп = 0,0101

+1,1101

10,0010 ( единица переноса теряется)