Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ИНФОР-I_РГУ-нефти7-10.doc
Скачиваний:
54
Добавлен:
24.03.2015
Размер:
966.14 Кб
Скачать

Отрицательные числа в компьютере

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

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

0

00 0 0 0 0 0 0 0 0 0 0 1 1

– число +3

Однако он оказался не очень удачным, т. к. такие простые и часто используемые операции, как сложение/вычитание, машине иногда приходилось выполнять в два этапа. Это ведь человек видит, какое слагаемое больше по абсолютной величине, когда ему приходится вычитать 7 из 2. А машина «сообразит» об этом только после неудачной попытки произвести заем из несуществующих разрядов. После этого она произведет обратное вычитание (2 из 7) и сменит у результата знак. И такие два действия вместо одного машине приходилось делать ровно в 25% всевозможных сочетаний знаков и абсолютных величин слагаемых.

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

1

00 0 0 0 0 0 0 0 0 0 0 1 1

число -3

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

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

1

1 1 1 1 1 1 1 1 1 1 1 1 0 0

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

1

1 1 1 1 1 1 1 1 1 1 1 1 0 1

число -3 дополнительный код

Примеры:

Число

Двоичный код

Прямой код

Обратный код

Дополнительный код

23

10111

00010111

00010111

00010111

-1

-1

10000001

11111110

11111111

-17

-10001

10010001

11101110

11101111

-70

-1000110

11000110

10111001

10111010

Свое название дополнительный код получил из-за того, что сумма k-разрядного положительного двоичного числа + N со своей отрицательной парой N дает . В этом нетрудно убедиться. Сложите двоичное положительное число+ N с двоичным эквивалентом N в обратном коде. В каждом разряде суммы получится 1, т. к. соответствующие разряды чисел + N и N всегда противоположны. А теперь добавьте к двоичному коду из k единиц недостающую единицу в младший разряд, то получится .

Таким образом, в дополнительном коде числа + N и N дополняют друг друга до соответствующей степени двойки.

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

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

Контрольные вопросы:

  1. В чем отличие позиционной системы счисления от непозиционной?

  2. Каковы способы перевода чисел из одной системы счисления в другую?

  3. В чем заключается преимущество использования восьмеричной и шестнадца­теричной систем счисления в вычислительной технике?

  4. Выполнить перевод из одной системы счисления в другую:

7358 = ?10 ; 11011,0112 = ?10 ; 34710 = ?2 ; 23,4816 = ?10 ; 358 = ?10 ;

351,34310 =?2 ; 1010010112=?16 ;10111000112=?8 ; 0,4510=?2 ; 5F16=?8