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

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

В большинстве компьютеров с целью упрощения конструкции АЛУ операция вычитания не используется. Она заменяется операцией сложения путем замены знака вычитаемого на противоположный и прибавления его к уменьшаемому:

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

Положительные числа в прямом, обратном и дополнительном кодах изображаются одинаково – двоичными кодами с цифрой 0 в знаковом разряде (см., например, рис. 2.8в).

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

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

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

Пример. Число: -1

Код модуля числа (в однобайтовом формате) 0,0000001

Обратный код 1,1111110

Представление числа в разрядной сетке показано на рис. 2.10

1

1

1

1

1

1

1

0


Рис. 2.10.

Пример. Число –127

Код модуля числа 0,1111111

Обратный код числа 1,0000000. Представление числа в обратном коде показано на рис. 2.11

1

0

0

0

0

0

0

0


Рис. 2.11

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

Пример. Представление числа –1 в дополнительном коде показано на рис. 2.12

1

1

1

1

1

1

1

1


Рис. 2.12

Представление числа –127 в дополнительном коде показано на рис. 2.13

1

0

0

0

0

0

0

1


Рис. 2.13

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

Использование различных способов изображения отрицательных чисел в ЦВМ обуславливает целый ряд особенностей выполнения операции алгебраического сложения двоичных чисел.

При сложении обратных кодов чисел Х1и Х2имеют место четыре основных и два особых случая.

  1. Х1>0 иX2>0. При суммировании складываются все разряды, включая разряд знака.

Пример

Десятичная запись Двоичные коды

0

0000101

+

0

0001001

0

0001110

(5)

+

(9)

(14)

  1. Х1>0,X2<0 и |X2|>X1

Пример

Десятичная запись Двоичные коды

0

0000011

+

1

1110101

1

1111000

3

       +

Обратный код числа -1010

-10

Обратный код суммы

-7

При переводе обратного кода (обр) в прямой (пр) получим:

  1. 1111000обр=1  0000111пр= -710

  1. Х1>0,X2<0 и |X2|<X1

Пример

Десятичная запись Двоичные коды

0

0001010

+

1

1111100

0

0000110

+1

0

0000111

10

       +

Обратный код числа -310

-3

7

Полученный непосредственно сразу неверный результат (число 6) исправляется путем переноса единицы из знакового разряда в младший разряд суммы. При этом получается правильный результат – число 710

  1. Х1<0 иX2<0

Пример.

Десятичная запись Двоичные коды

1

1111100

+

1

1111000

1

1110100

+1

1

1110101

Обратный код числа -310

-3

       +

Обратный код числа -710

-7

-10

Обратный код числа -1010

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

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

    1. Х1>0 , X2>0 и S=X1+X22n-1, гдеn– количество разрядов формата числа (для однобайтового форматаn=8, 2n-1=27=128)

Пример

Десятичная запись Двоичные коды

0

1000001

+

0

1100001

1

0100010

65

       +

97

Переполнение

162

Здесь имеет место переполнение разрядной сетки: семи разрядов цифровой части недостаточно для размещения восьмиразрядной суммы (16210=101000102), поэтому старший разряд суммы оказывается в знаковом разряде и знак суммы оказывается несовпадающим со знаком слагаемых, что является признаком переполнения разрядной сетки.

  1. Х1<0,X2<0 иS=|X1|+|X2|2n-1

Пример

Десятичная запись Двоичные коды

1

1000000

+

1

0100000

0

1100000

+1

Обратный код числа -6310

-63

       +

Обратный код числа -9510

-95

-158

Переполнение

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

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

1. Х1>0 иX2>0. Аналогично случаю 1 для обратных кодов.

2. Х1>0,X2<0 и |X2|>X1.

Пример.

Десятичная запись Двоичные коды

0

0000011

+

1

1110110

1

1111001

3

       -

Дополнительный код числа -1010

10

Дополнительный код числа -710

-7

При переводе дополнительного (доп) кода в прямой (пр) получим:

3. Х1>0,X2<0 и |X2|<Х1

Пример

Десятичная запись Двоичные коды

0

0001010

+

1

1111101

0

0000111

10

       -

Дополнительный код числа -310

3

перенос отбрасывается

7

Единица переноса из знакового разряда отбрасывается.

  1. Х1<0,X2<0

Пример

Дополнительный код числа -310

Десятичная запись Двоичные коды

1

1111101

+

1

1111001

1

1110110

-3

       +

Дополнительный код числа -710

-7

Дополнительный код числа -1010

-10

перенос отбрасывается

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

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