Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Теория информации - курс лекций.doc
Скачиваний:
432
Добавлен:
13.03.2015
Размер:
4.65 Mб
Скачать

5. Кодирование и обработка целых чисел со знаком

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

Первый способназываетсяпрямым кодом. При этом один (старший) разряд в машинном слове (напомним, здесь машинное слово – 16 разрядов) отводится для записи знака числа; при этом условились кодировать знак «+» нулем, а знак «» единицей. Под запись самого числа, очевидно, остается 15 двоичных разрядов, что обеспечивает наибольшее значение числа. Однако прямое кодирование усложняет вычисления. Например, операция сложения двух чисел с разными знаками должна быть заменена операцией вычитания меньшего из большего с последующим присвоением результату знака большего по модулю числа. Таким образом, такая операция сопровождается рядом проверок условий и выработкой признаков, в соответствии с которыми выбирается то или иное действие.

Второй способкодирования целых чисел со знаком называетсядополнительным кодированием. Идея построения дополнительного кода такова: на оси целых чисел (– всего 65536 чисел), помещающихся в машинное слово (в 16 разрядов) сместим положение нуля к середине интервала. При этом числа из первой половины () интервалабудем считать положительными, а числа из второй половины () будем считать отрицательными. Судить о знаке числа можно по его величине, и в явном виде выделение знака не требуется.Оказывается, что принадлежность кода к интервалу кодов положительных или отрицательных чисел также видна по состоянию старшего бита – у кодов положительных чисел его значение «0», а у кодов отрицательных – «1». Это напоминает представление чисел с помощью прямого кода, но принцип построения дополнительного кода другой. Применение дополнительного кода позволяет заменить вычитание чисел их суммированием в дополнительном коде.

Рассмотрим вычитание числа , что эквивалентно прибавлению.

При наличии kразрядов можно закодироватьчисел вP-ичной системе счисления. При этом максимальноеk-разрядноеP-ичное число есть, а число(оно содержитразрядов) можно считать нулем, так как первые слева (младшие)kразрядов (битов) в численулевые, а старший, единичный бит в нем уже не входит в отведенную разрядную сетку. Таким образом, можно записать:

. (12.5)

Однако вычесть избудет удобнее, если (12.5) преобразовать:

, (12.6)

причем число есть максимальноеP-ичноеk-разрядное число, каждая его цифра равна:

, (12.7)

, (12.8)

Цифры числа Zобозначим:

. (12.9)

Таким образом, с учетом (12.8) и (12.9), выражение (12.7) легко преобразуется:

. (12.10)

Величина (12.10) называется дополнением целого k-разрядного числа Z в системе счисления P.

Пример.;

.

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

. (12.11)

Пример.;

.

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

Из (12.11) логично заключить, что

, (12.12)

значит, при имеем

. (12.13)

Поэтому дополнительный код (DС)двоичных чисел в компьютере надо строить согласно следующему правилу:

  • для дополнительный код совпадает с самим числом, то есть;

  • для дополнительный код совпадает с дополнением модуля числа, то есть.

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

;

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

.

Кстати, используя результаты этих примеров, легко убедиться, что

.

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

В компьютере используется интервал целых чисел со знаком, закодированных дополнительным двоичным кодом. Именно таким является диапазон значений чисел типаIntegerв языкеPASCAL.

В компьютере перевод в дополнительный код осуществляется автоматически при вводе чисел. Именно в таком виде числа хранятся в ОЗУ и участвуют в арифметических операциях.

Еще раз отметим, что операция вычитания как самостоятельная отсутствует; она заменяется сложением уменьшаемого (то есть его дополнительного кода) с дополнением вычитаемого, то есть имеет место сложение содержимого двух ячеек памяти.

О знаке результата судят по значению старшего (первого слева) бита, как и в прямом двоичном коде (см. таблицу): «0» соответствует знаку «+», «1» соответствует знаку «».

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

Табл. 19. Прямые и дополнительные коды целых чисел со знаком

Прямой

десятичный код

Прямой

16-разрядный двоичный код

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

16-разрядный двоичный код

32 768

1000 0000 0000 0000

Совпадает с дополнением модуля

32 767

1111 1111 1111 1111

1000 0000 0000 0001

32 766

1111 1111 1111 1110

1000 0000 0000 0010

3

1000 0000 0000 0011

1111 1111 1111 1101

2

1000 0000 0000 0010

1111 1111 1111 1110

1

1000 0000 0000 0001

1111 1111 1111 1111

0

0000 0000 0000 0000

0000 0000 0000 0000

Совпадает с прямым кодом

+1

0000 0000 0000 0001

0000 0000 0000 0001

+2

0000 0000 0000 0010

0000 0000 0000 0010

+3

0000 0000 0000 0011

0000 0000 0000 0011

+32 766

0111 1111 1111 1110

0111 1111 1111 1110

+32 767

0111 1111 1111 1111

0111 1111 1111 1111