Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информационные преобразования числовых форматов....doc
Скачиваний:
7
Добавлен:
13.11.2018
Размер:
333.31 Кб
Скачать

2. Обратный код целого числа.

В дополненной аксиоматике арифметики отрицательные числа симметричны положительным числам относительно начального числа 0. Из этого следует, что сумма положительного и отрицательного числа равна 0, например 1 + (-1) = 5 + (-5) = 0 и т.п. В двоичном представлении числа 510, должно наблюдаться то же самое:

0

+

00001012

x2 (6)

000000002

Переменная x2 обозначает отрицательное число. Если присмотреться к расположению нулей и единиц в примере (6), то значение x2 можно представить так, чтобы в ответе получались только единицы. Такое представление называется обратным кодом. Для этого необходимо 0 заменить на 1, а 1 заменить на 0:

0

+

00001012

111110102 (7)

111111112

В примере (7) отрицательное число –510 представлено двоичным числом в обратном коде 111110102.

Чтобы в результате сложения положительного числа и его отрицательного числа в обратном коде получался 0, необходимо добавить 1 к результату сложения и учесть конечную позиционную размерность числа. Для байта – это 8 бит. Например,

0

+

00001012

111110102

1

+

11111112

12 (8)

1000000002

000000002

Итак, в обратном коде положительное число представлено обычным образом. Отрицательное число получается из положительного числа путем замены 0 на 1 и 1 на 0. Число 0 является положительным.

Если 8 бит рассматривать как код целого числа независимо от знака, то числа [00000000 ; 01111111]2 ~ [0 ; 127]10 составляют диапазон положительных чисел, а числа [10000000 ; 11111110]2 ~ [-128; -1]10 составляют диапазон отрицательных чисел. В этом смысле диапазон [0; 11111111]2 не соблюдает аксиоматику арифметики для отрицательных и положительных чисел. Для таких чисел процессор компьютера должен иметь специальные инструкции для корректного выполнения действий арифметики.

Если в результате сложения двух чисел в обратном коде получается число 1 в бите 8, т.е. слева от байта, то необходимо прибавить 1 к полученному результату. Например, –126 + 5 = -121:

01111110 126

1

+

0000001 -126

00000101 5

10000110 -121

01111001 121

Противоположный пример, -5 + 126:

00000101 5

1

+

1111010 -5

01111110 126

1 01111000

0

+

1111000

1

01111001 121

3. Дополнительный код целого числа.

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

  1. получить отрицательное число из положительного числа заменой 0 на 1 и 1 на 0;

  2. к полученному обратному коду прибавить 1.

В качестве примера покажем в одном байте обратный код числа –610 ~ 111110102 :

00000110 6

1

+

1111001 обратный код

1

11111010 -6 дополнительный код

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

Проверим корректность сложения в дополнительном коде. Сначала покажем, что, на пример, :

1

+

1111010 -6

00000110 6

1 00000000

00000000 0

Второй пример нацелен на отрицательное значение :

1

+

1111010 -6

00000101 5

11111111 -1

Действительно, в дополнительном коде -110 = 111111112 :

00000001 1

1

+

1111110 обратный код

1

11111111 -1 дополнительный код

Третий пример показывает положительный результат сложения, на пример, :

1

+

1111010 -6

00001001 9

1 00000011

00000011 3

Недостаток дополнительного кода заключается в том, что необходимо вычитать 1 для извлечения модуля числа, например

1

-

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

00000001 1

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

00000110 6 модуль числа

По вычислительным меркам такие действия выполняются не часто, на пример, для отображения числа на мониторе.