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:

  • Se qualquer operador for do tipo unsignedlongo, o outro operando é convertido no tipo unsigned long. 

  • Se antecedendo a condição não atendidos e se qualquer operador for do tipo longo e o outro do tipo unsignedint, ambos os operandos são convertidos para o tipo unsigned long. 

  • Se as duas condições anteriores não forem atendidas e se qualquer operador for do tipo longo, o outro operando é convertido no tipo longo.

  • Se as três condições anteriores não forem atendidas e se qualquer operador for do tipo unsigned int, o outro operando é convertido no tipo unsigned int.

  • Se nenhuma das condições anteriores forem atendidas, ambos os operandos são convertidos para o tipo int.

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.

Consulte também

Referência

Conversões padrão