Язык Си


А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.

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




  • - Начало -  - Назад -  - Вперед -