Книга: Язык программирования Си. Издание 3-е, исправленное

А6.5. Арифметические преобразования

А6.5. Арифметические преобразования

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

• Если какой-либо из операндов имеет тип long double, то другой приводится к long double.

• В противном случае, если какой-либо из операндов имеет тип double, то другой приводится к double.

• В противном случае, если какой-либо из операндов имеет тип float, то другой приводится к float.

• В противном случае для обоих операндов осуществляется целочисленное повышение: затем, если один из операндов имеет тип unsigned long int, то и другой преобразуется в unsigned long int.

• В противном случае, если один из операндов принадлежит типу long int, а другой - unsigned int, то результат зависит от того, покрывает ли long int все значения unsigned int, и если это так, то unsigned int приводится к long int; если нет, то оба операнда преобразуются в unsigned long int.

• В противном случае, если один из операндов имеет тип long int, то другой приводится к long int.

• В противном случае, если один из операндов - unsigned int, то другой приводится к unsigned int.

• В противном случае оба операнда имеют тип int.

Здесь есть два изменения. Во-первых, арифметика с операндами с плавающей точкой теперь может производиться с одинарной точностью, а не только с двойной; в первой редакции языка вся арифметика с плавающей точкой производилась с двойной точностью. Во-вторых, более короткий беззнаковый тип в комбинации с более длинным знаковым типом не распространяет свойство беззнаковости на тип результата; в первой редакции беззнаковый тип всегда доминировал. Новые правила немного сложнее, но до некоторой степени уменьшают вероятность появления неожиданных эффектов в комбинациях знаковых и беззнаковых величин. При сравнении беззнакового выражения со знаковым того же размера все же может возникнуть неожиданный результат.

Оглавление книги


Генерация: 0.160. Запросов К БД/Cache: 0 / 0
поделиться
Вверх Вниз