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

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

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

00 0 0 0 0 0 0 0 0 0 0 1 1 – число +3

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

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

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 0 0 число -3 обратный код
1 1 1 1 1 1 1 1 1 1 1 1 0 1 число -3 дополнительный код

Примеры:

Число Двоичный код Прямой код Обратный код Дополнительный код
-1 -1
-17 -10001
-70 -1000110

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

Таким образом, в дополнительном коде числа + 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

АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ

Наши рекомендации