Em atribuições no C temos o seguinte formato:
destino=orígem;
Se o destino e a orígem são de tipos diferentes o compilador faz uma conversão entre os tipos. Nem todas as conversões são possíveis. O primeiro ponto a ser ressaltado é que o valor de origem é convertido para o valor de destino antes de ser atribuído e não o contrário.
É importante lembrar que quando convertemos um tipo numérico para outro nós nunca ganhamos precisão. Nós podemos perder precisão ou no máximo manter a precisão anterior. Isto pode ser entendido de uma outra forma. Quando convertemos um número não estamos introduzindo no sistema nenhuma informação adicional. Isto implica que nunca vamos ganhar precisão.
Abaixo vemos uma tabela de conversões numéricas com perda de
precisão, para um compilador com palavra de 16 bits:
De | Para | Informação Perdida |
---|---|---|
unsigned char | char | Valores maiores que 127 são alterados |
short int | char | Os 8 bits de mais alta ordem |
int | char | Os 8 bits de mais alta ordem |
long int | char | Os 24 bits de mais alta ordem |
long int | short int | Os 16 bits de mais alta ordem |
long int | int | Os 16 bits de mais alta ordem |
float | int | Precisão - resultado arredondado |
double | float | Precisão - resultado arredondado |
long double | double | Precisão - resultado arredondado |
Curso de C do CPDEE/UFMG - 1996 - 1999