Понятие о специальном кодировании чисел

Для хранения чисел и выполнения различных операций над ними их представляют различными кодами: прямым, обратным и дополнительным. Как уже отмечалось выше, для представления чисел со знаками в памяти ЭВМ используют прямой код. Для обозначения прямого кода числа Х используется запись вида [X ]^.


Правило представления Q-ичного кода числа в прямом коде имеет вид:

где хi— значение цифры в i-м разряде исходного кода.


Здесь старший бит несет информацию о знаке числа. Если он принимает значение 0, то знак числа «+»; если значение 1 — то знак числа «-».


Например, для двоичного кода

Х(2)= +11001011 (2)]=0.11001011;
Х(2)= -01101011 (2)]=1.01101011.


При представлении чисел в прямом коде реализация арифметических операций в ЭВМ должна предусматривать различные действия с модулями чисел в зависимости от их знаков. Так, сложение в прямом коде чисел с одинаковыми знаками выполняется достаточно просто. Числа складываются и сумме присваивается код знака слагаемых. Значительно более сложной является операция алгебраического сложения в прямом коде чисел с различными знаками. В этом случае приходится определять большее по модулю число, производить вычитание чисел и присваивать разности знак большего по модулю числа. Для упрощения выполнения операций алгебраического сложения в ЭВМ используются специальные коды, позволяющие свести эту операцию к операции арифметического сложения. В качестве специальных в ЭВМ применяются обратный и дополнительный коды. Они образуются из прямых кодов чисел, причем специальный код положительного числа равен его прямому коду.


Для обозначения обратного кода числа Х(q) используется запись вида [Х(q)]обр.
Правило представления q-ичного кода числа в обратном коде имеет вид:

Здесь инверсия цифры хi, определяемая из соотношения:

где: q — основание системы счисления;
xj значение цифры в i-ом разряде исходного кода.


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


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


Например:

x(2)= +11011001, [X(2)] пр.=0.11011001, [X(2)] обр.= 0.11011001.
x(2)= - 01011101, [X(2)] пр.=1.01011101, [X(2)] обр.= 1.10100010.


Для обозначения дополнительного кода числа Х(q) используется запись вида [X(q)]доп. Правило представления q-ичного кода числа в дополнительном коде имеет вид:

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


Например, для двоичных чисел:

x(2)= +11011001, [X(2)] пр.= 0.11011001, [X(2)]доп.= 0.11011001.
x(2)= - 01011101, [X(2)] пр.=1.01011101, [X(2)]обр.= 1.10100011.


При выполнении операции сложения чисел, представленных специальными q-ичными кодами знаковые разряды участвуют в операции наряду с цифровыми разрядами. При этом цифровые разряды слагаемых складываются как модули чисел по правилам q-ичной арифметики. Знаковые разряды и цифры переноса из старшего цифрового разряда при любом основании системы счисления (q=2) складываются как одноразрядные двоичные коды. Если при этом формируется перенос из знакового разряда, то он имеет вес единицы младшего разряда q-m при использовании обратного кода и должен быть добавлен в младший разряд результата. При использовании дополнительного кода единица переноса из знакового разряда не принимается во внимание, т. е. отбрасывается.

Например:

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


0+0 = 1

или

1+1 = 0

Результат сложения специальных кодов чисел при переполнении разрядной сетки является неверным.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: