Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СОДЕРЖАНИЕ 3 (2).doc
Скачиваний:
28
Добавлен:
31.08.2019
Размер:
5.65 Mб
Скачать
    1. Представление чисел в прямом, обратном и дополнительном кодах

Запись числа в формате в естественной форме его представления (такой как принято писать числа на бумаге), но с кодом знака 0 вместо (+) и 1 вместо (–), без задания положения запятой в явном виде называют прямым кодом числа. Например, в формате с 5 позициями целого и 4 позициями дробной части запись прямого кода десятичного числа –236,16 будет представлена как 1|00236|1600. В дальнейшем границы полей формата будем изображать вертикальными черточками ( | ).

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

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

Пусть, например, необходимо выполнить сложение двух десятичных чисел –231,15 и +215,04. Сравниваем знаки операндов. Так как знаки не совпадают, то, казалось бы, для получения суммы следует вычесть из положительного числа модуль отрицательного, но это не так. Сравниваем модули операндов. Так как модуль отрицательного числа больше модуля положительного числа, то выполняем вычитание из модуля большего по модулю числа модуль меньшего по модулю и приписываем к разности знак числа имеющего больший модуль.

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

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

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

где – знак числа;

– цифры значащих разрядов;

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

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

  • в прямом коде – модуль количественного эквивалента числа ;

  • в обратном коде – дополнение модуля количественного эквивалента числа до веса знакового разряда, уменьшенного на вес младшего разряда, т.е. величину ;

  • в дополнительном коде – дополнение модуля количественного эквивалента числа до веса знакового разряда т.е. величину при .

П

P=10 P=10 P=10 P=2 P=2 P=2

+12,75: 0|12|75пр 0|12|75доп 0|12|75обр 0|1100|11пр 0|1100|11доп 0|1100|11обр

–12,75: 1|12|75пр 1|87|25доп 1|87|24обр 1|1100|11пр 1|0011|01доп 1|0011|00обр

ример 3-3
. Числа +12,75 и –12,75 в десятичной и двоичной системе счисления в разных кодах:

Здесь вес знакового разряда в кодах десятичных чисел 102 =100, а в кодах двоичных – 24 =16.

В прямом и обратном кодах количество ноль можно записать двумя способами: (+0) и (-0). Например, в прямом коде: 0|00...0 или 1|00...0; в обратном коде: 0|00...0 или 1|99...910 или 1|11...12.

Представляя числа в дополнительном коде, применяют один из трех вариантов кодирования.

  1. Количеству (+0) приводят в соответствие код 0|00...0доп, а количеству (-0) – код 1|00...0доп.

  1. Количествам (+0) и (-0) приводят в соответствие один код 0|00...0доп и принимают, что коду 1|00...0доп соответствует минимальное число представимое в формате .

  1. Количествам (+0) и (–0) приводят в соответствие один код 0|00...0доп и принимают, что коду 1|00...0 соответствует не число (NaN – Not a Number), а сообщение о том, что число не имеет значения (при выполнении программы переменной не присвоили значения).

Формулы для вычисления количественного эквивалента кода

    • прямого (3-09)

    • дополнительного (3-10)

    • обратного (3-11)

Здесь – индексы разрядов кода.

Выражение (3-10) справедливо для дополнительного кода варианта B. В вариантах A и C (3-10) справедливо при всех значениях кодов кроме кода 1|00...0, поскольку в варианте C код 1|00...0 не кодирует число, а в варианте A кодирует (-0).

В прямом, обратном и дополнительном (вариантов A и C) кодах диапазоны представления положительных и отрицательных чисел одинаковы и симметричны относительно нуля (рис.3.5). Модуль минимального (отрицательного) числа равен максимальному числу. Например, максимальные по модулю десятичные числа в прямом коде 0|99|999 и 1|99|999, в обратном коде 0|99|999 и 1|00|000, в дополнительном коде варианта А или C 0|99|999 и 1|00|001 соответственно. Найдите значения десятичных чисел представленных в обратном и в дополнительном коде самостоятельно, пользуясь выражениями (3-11) и (3-10).

В дополнительном коде варианта B диапазоны представления положительных и отрицательных чисел не симметричны относительно нуля. Модуль минимального (отрицательного) числа превышает максимальное число на величину равную весу младшего разряда . Дополнительный код минимального числа при любом натуральном 1|00...0, а его количественный эквивалент . Дополнительный код максимального числа имеет количественный эквивалент . Например, в десятичной системе счисления дополнительный код 0|99|999 имеет значение +99,999, а дополнительный код 1|00|000 имеет значение (-100,000). В двоичной системе счисления дополнительный код 0|11|111 имеет значение , а дополнительный код 1|00|000 имеет значение (-4).

Минимальное число представимое в дополнительном коде варианта B нельзя записать в прямом или в обратном коде, сохранив длину формата, так как оно в нем не умещается.

В любой системе счисления в формате правильной дроби коду 1|00...0доп соответствует целое (-1), а не правильная дробь.

Возможность записи в дополнительном коде варианта B значения обусловлена экономией кодов образующейся в результате представления только положительного нуля.

Асимметрия диапазонов положительных и отрицательных чисел допустима, но нежелательна. Чтобы исключить асимметрию дополнительного кода принимают соглашение о не использовании кода 1|00...0 для кодирования числа (вариант кода С). Обычно код 1|00...0 кодирует сообщение или признак того, что значение переменной не определено (не было присвоено при выполнении программы).

Тогда

  • Появление операнда с кодом 1|00...0 означает, что операнд имеет неопределенное значение, и операция не может быть выполнена. Если код операнда равен 1|00...0, формируют признак исключительной ситуации невыполнимая операция и выполнение программы вычислений прерывают. Это позволяет обнаружить ошибку в программе и создает преимущество представлению чисел в дополнительном коде (вариант кода B) перед их представлением в прямом или обратном коде.

  • Если дополнительный код результата выполнения арифметической операции равен 1|00...0, то принимают, что соответствующее ему число выходит за пределы области чисел представляемых в данном формате и формируют признак исключительной ситуации переполнения формата. Выполнение программы прерывают.

Варианты кода B и C имеют недостаток по сравнению с вариантом A, так как не позволяют представлять количество (-0), существующее в традиционной арифметике.