Выбрать главу

В этом примере при суммировании положительного и отрицательного числа автоматически получается правильный знак результата. В данном случае знак результата отрицательный. Флаг переноса совпадает со знаком результата, поэтому переполнения не было (мы можем убедиться в этом непосредственными вычислениями на бумаге или на калькуляторе).

4. Просуммируем положительное и отрицательное числа +12 и -5. Суммирование этих чисел в двоичном и десятичном представлении приведено на рис. 4.8.

Рис. 4.8. Суммирование чисел +12 и -5

В данном примере знак результата положительный. Флаг переноса совпадает со знаком результата, поэтому переполнения не было и в этом случае.

5. Просуммируем числа +100 и +31. Суммирование этих чисел в двоичном и десятичном представлении приведено на рис. 4.9.

Рис. 4.9. Суммирование чисел +100 и +31

В этом примере видно, что в результате суммирования произошло переполнение 8-битовой переменной, т. к. в результате операции над положительными числами получился отрицательный результат. Если рассмотреть флаг переноса С, то он не совпадает со знаком результата. Эта ситуации является признаком переполнения результата и легко обнаруживается при помощи операции «исключающее ИЛИ» над старшим битом результата и флагом переноса С. Большинство процессоров осуществляют эту операцию аппаратно и помещают результат во флаг переполнения OV.

6. Просуммируем числа -100 и -31. Суммирование этих чисел в двоичном и десятичном представлении приведено на рис. 4.10.

Рис. 4.10. Суммирование чисел -100 и -31

В этом примере операции над отрицательными числами в результате суммирования произошло переполнение 8-битовой переменной, т. к. получился положительный результат. И в этом случае если рассмотреть флаг переноса С, то он не совпадает со знаком результата. Отличие от предыдущего случая только в комбинации этих битов. В примере 5 говорят о переполнении результата (комбинация 01), а в примере 6 — об антипереполнении результата (комбинация 10).

Представление рациональных чисел в двоичном коде с фиксированной запятой

Кроме целых чисел, часто требуется работать с рациональными числами. Как и в случае целых чисел, рациональные числа могут быть беззнаковыми и знаковыми. Для двоичного представления знаковых рациональных чисел могут быть использованы прямые, обратные и дополнительные коды. Принцип их построения точно такой же, как и в случае целых чисел.

Рассмотрим, как можно записать рациональное число. Ранее, рассматривая целые числа, мы предполагали, что в двоичном числе запятая, разделяющая целую и дробную части, находится правее самого младшего разряда. Но кто сказал, что она должна всегда находиться именно в этом месте? Мы можем договориться, что запятая, разделяющая целую и дробную части двоичного числа, находится слева от самого старшего разряда, и тогда в такой переменной можно будет записывать только дробные числа, меньшие 1,010. Формат 8-разрядного дробного беззнакового двоичного кода приведен на рис. 4.11. На рисунке приведены два числа, записанных в этом коде.

Рис. 4.11. Формат 8-разрядного дробного беззнакового двоичного кода

Или договоримся, что она находится точно посередине кода, и тогда мы сможем записывать числа, содержащие как целую, так и дробную части. Формат такого 8-разрядного беззнакового двоичного кода приведен на рис. 4.12. На рисунке приведены два числа, записанных в этом коде.

Рис. 4.12. Формат 8-разрядного смешанного беззнакового двоичного кода

Остальные виды двоичных кодов, используемых для представления чисел с фиксированной запятой, рассматривать не будем. Они строятся точно так же, как и для целых чисел.

Представление рациональных чисел в двоичном коде с плавающей запятой

Часто приходится обрабатывать очень большие числа (например, расстояние между звездами) или, наоборот, очень маленькие числа (например, размеры атомов или электронов). При таких вычислениях пришлось бы использовать числа с фиксированной запятой очень большой разрядности. В то же время нам не нужно знать расстояние между звездами с точностью до миллиметра. Для вычислений с такими величинами числа с фиксированной запятой неэффективны.