Преобразование типов операндов арифметических операций
Если операнды арифметических операндов имеют один тип, то и результат операции будет иметь такой же тип.
Но, как правило, в операциях участвуют операнды различных типов. В этом случае они преобразуются к общему типу в порядке увеличения их «размера памяти», т.е. объема памяти, необходимого для хранения их значений. Поэтому неявные преобразования всегда идут от «меньших» объектов к «большим». Схема выполнения преобразований операндов арифметических операций выглядит следующим образом:
short, char | ® int | ® unsigned | ® long | ® double |
float | ® double |
Стрелки отмечают преобразования даже однотипных операндов перед выполнением операции. То есть действуют следующие правила:
– значения типов char и short всегда преобразуются в int;
– если один из операндов имеет тип double, то и другой преобразуется в double;
– если один из операндов long, то другой преобразуется в long.
Внимание. Результатом операции 1/3 будет значение 0, чтобы избежать такого рода ошибок, необходимо явно изменить тип хотя бы одного операнда, т.е. записать, например: 1./3 .
Типы char и int могут свободно смешиваться в арифметических выражениях. Каждая переменная типа char автоматически преобразуется в int, что обеспечивает значительную гибкость при проведении преобразований, т.к. над типом int действия выполняются быстрее, чем над любым другим типом.
При выполнении операции присваивания значение правого операнда преобразуется к типу левого, который и является типом полученного результата. И здесь необходимо быть внимательным, т.к. при некорректном использовании операций присваивания могут возникнуть неконтролируемые ошибки. Так, при преобразовании int в char старший байт просто отбрасывается.
Пусть: float x; int i; тогда и x = i; и i = x; приводят к преобразованиям, причем float преобразуется в int отбрасыванием дробной части.
Тип double преобразуется в float округлением.
Длинное целое преобразуется в более короткое целое и char посредством отбрасывания бит в старших разрядах.
Итак, безопасным преобразованием типов является преобразование в порядке увеличения «размера памяти», обратное преобразование может привести к потере значащих разрядов.
Дата добавления: 2014-12-30; просмотров: 1052;