Книга: Язык программирования Си. Издание 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.
Здесь есть два изменения. Во-первых, арифметика с операндами с плавающей точкой теперь может производиться с одинарной точностью, а не только с двойной; в первой редакции языка вся арифметика с плавающей точкой производилась с двойной точностью. Во-вторых, более короткий беззнаковый тип в комбинации с более длинным знаковым типом не распространяет свойство беззнаковости на тип результата; в первой редакции беззнаковый тип всегда доминировал. Новые правила немного сложнее, но до некоторой степени уменьшают вероятность появления неожиданных эффектов в комбинациях знаковых и беззнаковых величин. При сравнении беззнакового выражения со знаковым того же размера все же может возникнуть неожиданный результат.
- Арифметические операции
- Виды выражений
- A6.2. Целочисленные преобразования
- 4.1.2. Арифметические операторы присваивания
- Преобразования типов
- 1.2 Переменные и арифметические выражения
- 2.5 Арифметические операторы
- A6. Преобразования
- A6.3. Целые и числа с плавающей точкой
- A6.4. Типы с плавающей точкой
- Глава 2. Типы, операторы и выражения
- Арифметика