Пример 3.21
Сложить два числа в дополнительном коде: (-11/16)+(-5/16)=(-16/16). Результат — на рис. 3.20. Переполнение по признакам выражения (3.19) не обнаружено! Однако результат операции — "отрицательный ноль", который не может использоваться Рис. 3.20. Результат выполнения примера 3.21 в дополнительном коде. Действительно, сложение в дополнительном коде любого числа с "отрицательным нулем" 1, 00...0 меняет знак этого числа. Итак, при A<0, B<0, признаком переполнения служит не выражение (3.19), а код результата 1, 00...0. Таким образом, значение признака переполнения в дополнительном коде можно получить в соответствии со следующим выражением: (3.22) Подведем итоги. Применение дополнительного кода, по сравнению с обратным, имеет одно существенное преимущество — коррекция результата сводится просто к отбрасыванию переноса из знакового разряда и не требует дополнительных затрат времени. К недостаткам применения дополнительного кода можно отнести, во-первых, более сложную процедуру взаимного преобразования ПК↔ ДК, требующую дополнительных затрат времени, и, во-вторых, проблемы с обнаружением переполнения. Для того чтобы минимизировать влияние первого недостатка, данные в памяти часто хранят в дополнительном коде. В этом случае преобразования ПК ↔ ДК выполняются относительно редко — только при вводе и выводе.
|