Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
A maioria dos operadores C executa conversões de tipo para trazer os operandos de uma expressão para um tipo comum ou para estender valores curtos para o tamanho inteiro usado em operações de máquina. As conversões realizadas pelos operadores C dependem do operador específico e do tipo de operando ou operandos. No entanto, muitos operadores executam conversões semelhantes em operandos de tipos integrais e flutuantes. Essas conversões são conhecidas como "conversões aritméticas". A conversão de um valor de operando para um tipo compatível não causa nenhuma alteração em seu valor.
As conversões aritméticas resumidas abaixo são chamadas de "conversões aritméticas usuais". Essas etapas são aplicadas somente para operadores binários que esperam o tipo aritmético. O objetivo é produzir um tipo comum que também é o tipo do resultado. Para determinar quais conversões realmente ocorrem, o compilador aplica o seguinte algoritmo a operações binárias na expressão. As etapas abaixo não são uma ordem de precedência.
Se um operando for do tipo
long double, o outro operando será convertido em tipolong double.Se a condição acima não for atendida e qualquer operando for do tipo
double, o outro operando será convertido em tipodouble.Se as duas condições acima não forem atendidas e qualquer operando for do tipo
float, o outro operando será convertido em tipofloat.Se as três condições acima não forem atendidas (nenhum dos operandos é de tipos flutuantes), as conversões integrais serão realizadas nos operandos da seguinte maneira:
Se um operando for do tipo
unsigned long, o outro operando será convertido em tipounsigned long.Se a condição acima não for atendida e um operando for do tipo
longe o outro do tipounsigned int, ambos os operandos serão convertidos em tipounsigned long.Se as duas condições acima não forem atendidas, e qualquer operando for do tipo
long, o outro operando será convertido em tipolong.Se as três condições acima não forem atendidas, e qualquer operando for do tipo
unsigned int, o outro operando será convertido em tipounsigned int.Se nenhuma das condições acima for atendida, ambos os operandos serão convertidos em tipo
int.
O código a seguir ilustra essas regras de conversão:
float fVal;
double dVal;
int iVal;
unsigned long ulVal;
dVal = iVal * ulVal; /* iVal converted to unsigned long
* Uses step 4.
* Result of multiplication converted to double
*/
dVal = ulVal + fVal; /* ulVal converted to float
* Uses step 3.
* Result of addition converted to double
*/