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

 

При вычислении ЭВМ оперируют как с положительными, так и с отрицательными числами. При этом вычитание можно заменить сложением, воспользовавшись дополнением отрицательного числа. Дополнением числа 12510 будет число 87510, числа 12516 будет число ЕDВ16, для числа 11012 – число 112. Эти дополнения получают следующим образом:

_100010 _100016 _100002

12510 12516 11012

87510 EDB16 112

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

Прямой код совпадает с записью самого числа. В знаковом разряде записывается 0 (знак +) или 1 (знак -), а затем записывается само число.

Например, числа: А1=+0,1010 и А2= 0,1010 в прямом коде записываются в виде: [А1]пр=0 1010 и [А2]пр=1 1010.

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

В2 = 0,11101 [В2]пр.= 1 11101.

Обратный код отрицательного числа получается следующим образом: в знаковом разряде записывается единица, а в цифровых разрядах нули заменяются единицами, а единицы – нулями.

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

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

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

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

Например: числа А1=+0,1010 и А2= 0,1010 в дополнительном коде записываются в виде: [А1]доп.=0 1010 и [А2]доп.=1 0110.

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

В2 = 0,001101 [В2]доп.= 1 110011.

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

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

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

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

Например, в обратном коде операции алгебраического сложения выполняются следующим образом:

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

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

[х]обр.=0 1100

х= 0,1100

2) а= 0,1010<0 [а]обр.=1 0101

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

10 0001

[х]обр.=0 0010

х= 0,0010

3) а=0,1010>0 [а]обр.= 0 1010

b= 0,0010<0 [в]обр.= 1 1101

10 0111

[х]обр.= 0 1000

х= 0,1000

4) a= – 0,1010<0 [a]обр.=1 0101

b= – 0,0010<0 [b]обр.=1 1101

11 0010

[x]обр.=1 0011