Модифицированные обратный и дополнительный коды.
При переполнении разрядной сетки, происходит перенос единицы в знаковый разряд. В этом случае положительное число, получившееся в результате арифметической операции может восприниматься как отрицательное, так как в знаковом разряде записывается «1». Например:
X = 0, 1 0 1 0 1 1 0
Y = + 0, 1 1 0 1 0 0 0
X+Y = 1, 0 1 1 1 1 1 0
Здесь X и Y – коды положительных чисел, но ЭВМ воспринимает результат их сложения как код отрицательного числа («1» в знаковом разряде). Для обнаружения переполнения разрядной сетки вводятся модифицированные коды.
Модифицированный обратный код получают путем выделением под знак числа не одного, а двух разрядов. Форма записи чисел в модифицированном обратном коде выглядит следующим образом:
1) для положительного числа X = XnXn-1…X2X1X0:
;
2) для отрицательного числа X = XnXn-1…X2X1X0:
(обозначение читается «не X», т.е., если X = 0, то = 1 и наоборот, если X = 1, то = 0).
Любая другая комбинация («0 1» или «1 0»), получившаяся в знаковых разрядах служит признак ом переполнения разрядной сетки. Сложение чисел в модифицированном обратном коде ничем не отличается от сложения в обычном обратном коде.
Рассмотрим предыдущий пример, выполнив сложение в модифицированном обратном коде:
X = 0 0, 1 0 1 0 1 1 0
Y = + 0 0, 1 1 0 1 0 0 0
X+Y = 0 1, 0 1 1 1 1 1 0
Обратим внимание на то, что в записи введен дополнительный (девятый) бит. Далее будем использовать 8-битную разрядную сетку. Уменьшая максимальное возможное значение числа (по модулю) выделим два знаковых разряда.
В процессе работы ЭВМ оба знаковых разряда сравниваются. В случае появления признака переполнения машина останавливается.
Модифицированный дополнительный код также рассматривает два знаковых разряда, а во всем остальном ничем не отличается от обычного дополнительного кода, то есть:
1) для положительного числа X = XnXn-1…X2X1X0:
;
2) для отрицательного числа X = XnXn-1…X2X1X0:
.
Пример. Даны два числа: X = 101001 и Y = – 11010. Сложить их в обратном, дополнительном и модифицированных обратном и дополнительном кодах.
1) Переведем X и Y в обратный и дополнительный коды:
Прямой код
| Обратный код
| Дополнительный код
| Xпр= 0, 0 1 0 1 0 0 1
Yпр= 1, 0 0 1 1 0 1 0
| Xобр = 0, 0 1 0 1 0 0 1
Yобр = 1, 1 1 0 0 1 0 1
| Xдоп = 0, 0 1 0 1 0 0 1
Yдоп = 1, 1 1 0 0 1 1 0
| а так же в модифицированные обратный и дополнительный коды:
Модифицированный прямой код
| Модифицированный обратный код
| Модифицированный дополнительный код
| Xпр= 0 0, 1 0 1 0 0 1
Yпр= 1 1, 0 1 1 0 1 0
| = 0 0, 1 0 1 0 0 1
= 1 1, 1 0 0 1 0 1
| = 0 0, 1 0 1 0 0 1
= 1 1, 1 0 0 1 1 0
| Выполним сложение в обратном и модифицированном обратном кодах:
Обратный код
| Модифицированный обратный код
|
Xобр = 0, 0 1 0 1 0 0 1
Yобр = 1, 1 1 0 0 1 0 1
1 0, 0 0 0 1 1 1 0
+1
(X+Y)обр = 0, 0 0 0 1 1 1 1
|
= 0 0, 1 0 1 0 0 1
= 1 1, 1 0 0 1 0 1
1 0 0, 0 0 1 1 1 0
+1
(X+Y)обр = 0 0, 0 0 1 1 1 1
| Выполним сложение в дополнительном и модифицированном дополнительном кодах:
Дополнительный код
| Модифицированный дополнительный код
|
Xдоп = 0, 0 1 0 1 0 0 1
Yдоп = 1, 1 1 0 0 1 1 0
1 0, 0 0 0 1 1 1 1
отбрасывается
(X+Y)доп = 0, 0 0 0 1 1 1 1
|
= 0 0, 1 0 1 0 0 1
= 1 1, 1 0 0 1 1 0
1 0 0, 0 0 1 1 1 1
отбрасывается
(X+Y)доп = 0 0, 0 0 1 1 1 1
| Переполнения разрядной сетки нет (символы в знаковых разрядах одинаковые), а полученное число – положительное (в знаковых разрядах «00») поэтому полученные коды всех результатов совпадают (X+Y=1111).
Не нашли, что искали? Воспользуйтесь поиском:
|