Поделиться через


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

Многие двоичных операторов (в рассматриваемых выражения с бинарными операторами) преобразования причины операндов и вывода приводят к одной и той же способом.Способ эти преобразования причины операторов называется "обычными арифметическими преобразованиями". Арифметические преобразования собственных типов операндов различных выполняются как показано в следующей таблице.Типы Typedef поведение в соответствии с их основным собственный тип.

Условия для преобразования типа

Соотвествованные условия

Преобразование

Любой из операндов типа long Двойное с плавающей запятой.

Другой операнд преобразован в тип long Двойное с плавающей запятой.

Предшествующее не соотвествованное условие и любой из операндов типа Двойное с плавающей запятой.

Другой операнд преобразован в тип Двойное с плавающей запятой.

Предыдущие не соотвествованные условия и любой из операндов типа Плавающая область.

Другой операнд преобразован в тип Плавающая область.

Предыдущие не соотвествованные условия (ни один из операндов типов плавающей запятой).

Объединенные promotion выполняются для операндов следующим образом:

  • Если любой из операндов типа unsigned longдругой операнд преобразован в тип unsigned long.

  • Если предыдущее не соотвествованное условию, и если любой из операндов типа long и еще один из типов unsigned intоба операнда преобразуются в тип unsigned long.

  • Если условия не соблюдаются, предшествующим 2, и если любой из операндов типа long longдругой операнд преобразован в тип .

  • Если условия не соблюдаются, предшествующим 3, и если любой из операндов типа unsigned intдругой операнд преобразован в тип unsigned int.

  • Если ни одно из указанных выше условий выполняются, то оба операнда преобразуются в тип int.

Следующий код иллюстрирует правила преобразования, описанные в таблице:

// 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;
}

В первой выписку в предыдущем примере показаны умножение 2 целочисленных типов iVal и ulVal.Соотвествованное условие, что операнд не является типом плавающей запятой и один операнд типа unsigned int.Поэтому другой операнд, iVal, преобразование к типу unsigned int.Результат присвоенный dVal.Соотвествованное условие, что один операнд типа Двойное с плавающей запятой; следовательно, unsigned int результат умножения преобразован в тип Двойное с плавающей запятой.

На второй выписку в предыдущем примере показано добавление a Плавающая область и целочисленный тип, fVal и ulVal.ulVal переменная преобразована к типу Плавающая область (третье условие в таблице).Результат сложения преобразован в тип Двойное с плавающей запятой (второе условие в таблице) и присвоить dVal.

См. также

Ссылки

Стандартные преобразования