Conversões aritméticas
Muitos operadores binários (discutidos em Expressões com operadores binários) provocam conversões de operandos e produzem resultados da mesma maneira. A forma como esses operadores provocam conversões é chamada "conversões aritméticas usuais". As conversões aritméticas de operandos de tipos nativos diferentes são executadas como mostra a tabela a seguir. Os tipos Typedef se comportam de acordo com seus tipos nativos subjacentes.
Condições para a conversão de tipos
Condições atendidas |
Conversão |
---|---|
Qualquer um dos operandos é do tipo long double. |
O outro operando é convertido no tipo long double. |
A condição anterior não foi atendida e qualquer um dos operandos é do tipo double. |
O outro operando é convertido no tipo double. |
As condições anteriores não foram atendidas e qualquer um dos operandos é do tipo float. |
O outro operando é convertido no tipo float. |
As condições anteriores não foram atendidas (nenhum dos operandos é de tipo flutuante). |
As promoções de integral são executadas nos operandos, da seguinte forma:
|
O código a seguir ilustra as regras de conversão descritas na tabela:
// 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;
}
A primeira instrução no exemplo acima mostra a multiplicação de dois tipos integrais, iVal e ulVal. A condição atendida é que nenhum dos operandos é de tipo flutuante e um operando é do tipo unsigned int. Portanto, o outro operando, iVal, é convertido no tipo unsigned int. O resultado é atribuído a dVal. A condição atendida é que um operando é do tipo double; portanto, o resultado unsigned int da multiplicação é convertido no tipo double.
A segunda instrução no exemplo acima mostra a adição de um tipo float e um integral, fVal e ulVal. A variável ulVal é convertida no tipo float (terceira condição na tabela). O resultado da adição é convertido no tipo double (segunda condição na tabela) e atribuído a dVal.