Модифицированные обратный и дополнительный коды
Например: X= 0,1010110 Y= 0,1101000 X+Y= 1,0111110 |
При переполнении разрядной сетки, происходит перенос единицы в знаковый разряд. Это приводит к неправильному результату, причем положительное число, получившееся в результате арифметической операции может восприниматься как отрицательное (так как в знаковом разряде "1") и наоборот.
Здесь X и Y – коды положительных чисел, но ЭВМ воспринимает результат их сложения как код отрицательного числа (“1” в знаковом разряде). Для обнаружения переполнения разрядной сетки вводятся модифицированные коды.
Модифицированный обратный код – в нем под знак числа отводится не один, а два разряда. Форма записи чисел в модифицированном обратном коде выглядит следующим образом:
1) для положительного числа
X= ; X
=
;
2) для отрицательного числа
X= ; X
=
;
(обозначение читается “не X”, т.е. , если X=0, то
=1 и наоборот, если X=1, то
=0).
В модифицированном обратном и модифицированном дополнительном кодах под знак числа отводится не один, а два разряда: "00" соответствует знаку "+", "11" – знаку "-". Любая другая комбинация (“01” или “10”), получившаяся в знаковых разрядах служит признаком переполнения разрядной сетки. Сложение чисел в модифицированных кодах ничем не отличается от сложения в обычных обратном и дополнительном кодах.
Рассмотрим предыдущий пример, выполнив сложение в модифицированном обратном коде:
X= 00,101011 Y= 00,110100 X+Y= 01,011111 |
В ЭВМ в процессе работы оба знаковых разряда сравниваются. В случае появления признака переполнения машина останавливается.
Модифицированный дополнительный код также рассматривает два знаковых разряда, а во всем остальном ничем не отличается от обычного дополнительного кода, то есть:
1) для положительного числа
X= ; X
=
;
2) для отрицательного числа
X= ; X
=
+0,000 . . . 1;
Пример. Даны два числа: X=101001 и Y= –11010. Сложить их в дополнительном и модифицированном дополнительном кодах.
1) Переведем X и Y в дополнительный и модифицированный дополнительный код:
Обычная запись | Обратный код | Дополнительный код |
X=+0101001 Y=–0011010 | Xобр=0,0101001 Yобр=1,1100101 | Xдоп=0,0101001 Yдоп=1,1100110 |
Обычная запись | Мод. обратный код | Мод. дополнительный код |
X=+101001 Y=–011010 | ![]() ![]() | ![]() ![]() |
2) Выполним сложение:
![]() ![]() | X ![]() ![]() ![]() |
Переполнения нет (в знаковых разрядах “00”), поэтому результаты, полученные в обычном и модифицированном кодах совпадают (X+Y=1111).