Арифметические преобразования
Многие бинарные операторы (рассмотренные в разделе Выражения с бинарными операторами) приводят к преобразованиям операндов и выдают результаты таким же образом. Способ, посредством которого эти операторы вызывают преобразования, называется обычными арифметическими преобразованиями. Арифметические преобразования операндов различных собственных типов выполняются согласно описанию в следующей таблице. Типы typedef ведут себя в соответствии со своими базовыми собственными типами.
Условия для преобразования типов
Выполненные условия |
Преобразование |
---|---|
Один из операндов является операндом типа long double. |
Другой операнд преобразуется в тип long double. |
Предыдущее условие не выполнено и один из операндов является операндом типа double. |
Другой операнд преобразуется в тип double. |
Предыдущие условия не выполнены и один из операндов является операндом типа float. |
Другой операнд преобразуется в тип float. |
Предыдущие условия не выполнены (ни один из операндов не является операндом с плавающей запятой). |
Для операндов выполняются восходящие приведения целого типа следующим образом.
|
В следующем коде демонстрируются правила преобразования, описанные в таблице.
// arithmetic_conversions.cpp
double dVal;
float fVal;
int iVal;
unsigned long ulVal;
int main() {
// iVal converted to unsigned long
// result of multiplication converted to double
dVal = iVal * ulVal;
// ulVal converted to float
// result of addition converted to double
dVal = ulVal + fVal;
}
Первый оператор в приведенном выше примере представляет умножение двух целочисленных типов, iVal и ulVal. Условие выполнено, т. е. ни один из операндов не является операндом типа с плавающей запятой и один операнд имеет тип unsigned int. Следовательно, другой операнд, iVal, преобразуется в тип unsigned int. Результат присваивается переменной dVal. Условие выполнено, т. е. один операнд имеет тип double; поэтому результат unsigned int умножения преобразуется в тип double.
Второй оператор в предыдущем примере представляет сложение переменных типа float и целого типа, fVal и ulVal. Переменная ulVal преобразуется в тип float (третье условие в таблице). Результат сложения преобразуется в тип double (второе условие в таблице) и присваивается переменной dVal.