Conversões aritméticas
Muitos operadores binários (discutido em expressões com operadores binários) causar conversões dos operandos e produzir resultados da mesma maneira.A maneira como esses operadores fazem com que as conversões é chamado de "conversões aritméticas usuais." Conversões de aritméticas de operandos de tipos diferentes de nativos são executadas conforme mostrado na tabela a seguir.Tipos de TypeDef se comportem de acordo com seus tipos nativos subjacentes.
Condições para conversão de tipo
Condições atendidas |
Conversão |
---|---|
Qualquer operador for do tipo longodouble. |
Outro operando é convertido no tipo longodouble. |
Precede a condição não atendidos e qualquer operador é do tipo double. |
Outro operando é convertido no tipo double. |
Precede condições não atendidas e qualquer operador é do tipo float. |
Outro operando é convertido no tipo float. |
Precede condições não atendidas (nenhum dos operandos são de tipos de flutuantes). |
Promoções integrais são executadas em operandos:
|
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 anterior mostra a multiplicação de dois tipos de integrais, iVal e ulVal.A condição atendida é que nenhuma das operando é do tipo de flutuante e um operando for 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 for do tipo double; Portanto, o unsigned int o resultado da multiplicação é convertido no tipo double.
A segunda declaração no exemplo anterior mostra a adição de um float e tipo integral, fVal e ulVal.O ulVal variável é convertido no tipo float (a terceira condição na tabela).O resultado da adição é convertido no tipo double (segunda condição na tabela) e atribuídos a dVal.