Для хранения чисел и выполнения различных операций над ними их представляют различными кодами: прямым, обратным и дополнительным. Как уже отмечалось выше, для представления чисел со знаками в памяти ЭВМ используют прямой код. Для обозначения прямого кода числа Х используется запись вида [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
Результат сложения специальных кодов чисел при переполнении разрядной сетки является неверным.