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

При вычислении ЭВМ оперируют как с положительными, так и с отрица-

тельными числами. При этом вычитание можно заменить сложением, восполь- зовавшись дополнением отрицательного числа. Дополнением числа 12510 будет

число *7510, числа 12516 будет число ЕDВ16, для числа 11012 - число 112. Эти

дополнения получают следующим образом:

_1*0010            _100016            _10000*

12510                12516                1*01*

87510               EDB16                   112

Так как в ЭВМ имеются только устройства, выполняющие сложение, то

вычитание заменяется сложением специальных кодов чисел. Для выполнения операций с двоичными числами в ЭВМ используются прямой, обратный, до- полнительный, модифицированные обратный и дополнительный коды. Изо-

бражение положительных чисел во всех кодах одинаково, а отрицательных -

различно.

Прямой код совпадает с записью самого числа. В знаковом разряде за-

писывается 0 (знак +) или 1 (знак -), а затем записывается само число.

Например, числа: А1=+*,10*0 и А2= - *,10*0 в прямом коде записываются в

виде: [А1]пр=0 1010 и [А2]пр=1 1*10.

Пример: В* = +0,1*1001                 [В*]пр.= 0 *0*001;

В2 = - 0,*1101                  [В2]пр.= 1 *1101.

Обратный код отрицательного числа получается следующим обра-

зом: в знаковом разряде записывается единица, а в цифровых разрядах нули

заменяются единицами, а единицы - нулями.

Например, числа А1=+0,1010 и А2= - 0,101* в обратном коде записываются в

виде [А1]обр.=0 101* и [А2]обр.=1 0101.

Пример: В1 = +0,101100                 [В1]обр.= 0 101110;

В2 = - 0,010101                [В2]обр.= 1 1*1*1*.

Дополнительный код отрицательного числа получается добавлением

единицы к младшему разряду обратного кода этого числа.

Например: числа А1=+0,1010 и А2= - 0,101* в дополнительном коде записыва-

ются в виде: [А1]доп.=* 101* и [А*]доп.=1 0*10.

Пример: В1 = +0,00110                   [В1]доп.= 0 0*110;

В2 = - 0,00*101                [В2]доп.= 1 110011.

Модифицированный код отличается тем, что на изображение знака

числа в нем отводится два разряда, что дает возможность выявить перепол-

нение разрядной сетки.

Например, для числа А= - 0,101* получим [А]мобр.=11 *101, [А]мдоп.=11 0110.

Переход от обратного и дополнительного кодов к прямому осуществляется

аналогично переходу от прямого кода к обратному и дополнительному.

При сложении и вычитании чисел в обратном коде единица переноса, вы-

шедшая за пределы знакового разряда, не отбрасывается, а прибавляется к

младшему разряду результата, что осуществляется автоматически.

Например, в обратном коде операции алгебраического сложения выполня-

ются следующим образом:

1) а=0,10*0>0                          [а]обр.=0 1010

b=0,0010>0                         [в]обр.=0 0010

[х]обр.=0 1100

х= 0,1100

2) а= - *,1010<0

b= 0,1100>0

 

 

 

 

 

3) а=0,*010>*

b= - 0,0010<0

 

 

 

 

 

*) a= - 0,1010<0

b= - 0,0010<0


[а]обр.=1 0101

[в]обр.=0 1100

10 0001

[х]обр.=0 001*

х= 0,0010

[а]обр.= 0 1010

[в]обр.= * 1101

10 011*

[х]обр.= 0 100*

х= 0,1000

[a]обр.=1 0101 [b]обр.=* 1101

11 00*0

[*]обр.=* 0011

*= - 0,1100


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

дит поразрядно, включая и знаковые разряды. Единица переноса, вышедшая за

пределы знакового разряда, отбрасывается.

Пример:


*= - 0,*01*<0 b= - 0,0010<0


[a]доп.=1 0110 [b]доп.=1 1*10

11 01*0

[х]доп.=1 010* [х]обр.=1 *0*1

х= - *,1100


Например, имеется число А1 = 0,10*112 и А2 = 0,01*2. Нужно выполнить

действие А1-А2

_0,10111

0,01*00

0,01011

Заменим операцию вычитания сложением. Для этого произведём кодирование:

получим обратный и дополнительный коды для чисел А1 и А2.

[A*]обр.= * 10111               [A2]обр.= * 1001*

[A*]доп.= 0 *0*1*                [*2]доп.= 1 1*100

Выполним операцию сложения полученных кодов

+ [A1]обр.= * 10111

[A*]обр.= 1 10011

10 010*0

[A1+A*]обр.= 0 01011

A1+A2 = 0,0101*

 

 

+[A1]доп.= 0 1011*

[A2]доп.= * 1010*

10 *1*11

[A*+A2]доп.= 0 01011

*1+A2 = *,0101*