В 11 разрядной сетке выполнить операции:
А-В=?
-А-В=?
При этом использовать код (обратный, дополнитеьный, модифицированный обратный, модифицированный дополнительный) соответствующий заданному варианту из нижеследующей таблицы, Результат представить в прямом коде. А=429, В=808.
Решение
Как известно, компьютер выполняет только одну арифметическую операцию - сложение. Поэтому, вычитание чисел заменяют сложением, представляя отрицательные числа особым образом (как и операции умножения и деления).
Итак, необходимо выполнить операцию вычитания А-В. Заменяем операцию вычитания операцией сложения: А+(-В). Т.е. имеем сложение положительного числа с отрицательным числом.
Прежде всего, переведем заданные числа в двоичную систему счисления: А=429, В=808.
429|1 808|0
214|0 404|0
107|1 202|0
53|1 101|1
26|0 50|0
13|1 25|1
6|0 12|0
3|1 6|0
1|1 3|1
1|1
Итак, имеем:
42910=1101011012, и 80810=11001010002.
Чтобы разместить заданные числа в разрядную сетку из 11 разрядов, необходимо старший разряд отвести для записи знака числа. Пишут 0 в знаковом разряде, если число положительное, и пишут 1, если число отрицательное. В нашем случае заданные числа запишутся так:
А 0 0 1 1 0 1 0 1 1 0 1
В 0 1 1 0 0 1 0 1 0 0 0
Вверху - записано число А, внизу - число В. Оба числа записаны в прямом коде как положительные числа (в знаковом разряде каждого числа стоит 0).
Чтобы сложить положительное двоичное число с отрицательным двоичным числом, необходимо отрицательное число кодировать
. Можно использовать обратный код. Для получения записи числа в обратном коде, необходимо инвертировать содержание каждого разряда числа, записанного в прямом коде, включая знаковый. Тогда искомая сумма будет получена следующим образом:
А 0 0 1 1 0 1 0 1 1 0 1
-В 1 0 0 1 1 0 1 0 1 1 1
А-В 1 1 0 1 0 0 0 0 1 0 0
Чтобы получить результат в прямом коде, необходимо инвертировать все разряды отрицательного числа, кроме знакового. Имеем результат в прямом коде:
А-В 1 0 1 0 1 1 1 1 0 1 1
Проверка.
42910-80810=-37910; -(256+64+32+16+8+2+1)=-379.
Найдем теперь сумму -429-808=(-429)+(-808)=-1237.
-А 1 1 0 0 1 0 1 0 0 1 0
-В 1 0 0 1 1 0 1 0 1 1 1
-А-В 0 1 1 0 0 1 0 1 0 0 1
Здесь число -А представлено в обратном коде.
Полученный результат неверный хотя бы потому, что сумма от сложения двух отрицательных чисел положительна, так как в знаковом разряде имеем 0.
Как компьютер может распознавать такую ситуацию? В этом случае решили на знаковый разряд отводить не один, а два двоичных разряда 00 для положительных и 11 для отрицательных чисел