Conversões de tipos integrais assinados
Quando um inteiro com sinal é convertido em um inteiro sem sinal de tamanho igual ou maior e o valor do inteiro com sinal não é negativo, o valor não é alterado. A conversão é feita estendendo o sinal do inteiro com sinal. Um inteiro com sinal é convertido em um inteiro com sinal mais curto truncando os bits de ordem superior. O resultado é interpretado como um valor sem sinal, conforme é mostrado neste exemplo.
int i = -3;
unsigned short u;
u = i;
printf_s( "%hu\n", u ); // Prints 65533
Nenhuma informação é perdida quando um inteiro com sinal é convertido em um valor flutuante; apenas alguma precisão pode ser perdida quando um valor long int ou unsigned long int é convertido em um valor float.
A tabela a seguir resume as conversões de tipos integrais com sinal. Ela pressupõe que, por padrão, o tipo char tem sinal. Se você usar uma opção de tempo de compilação para alterar o padrão do tipo char para sem sinal, as conversões fornecidas na tabela de conversões de tipos integrais sem sinal para o tipo unsigned char serão aplicadas no lugar das conversões indicadas na tabela a seguir, de conversões de tipos integrais com sinal.
Conversões de tipos integrais com sinal
De |
Em |
Método |
---|---|---|
char1 |
short |
Extensão de sinal |
char |
long |
Extensão de sinal |
char |
unsigned char |
Preserva o padrão; o bit de ordem superior perde a função como bit de sinal |
char |
unsigned short |
Extensão de sinal para short; converte short em unsigned short |
char |
unsigned long |
Extensão de sinal para long; converte long em unsigned long |
char |
float |
Extensão de sinal para long; converte long em float |
char |
double |
Extensão de sinal para long; converte long em double |
char |
long double |
Extensão de sinal para long; converte long em double |
short |
char |
Preserva o byte de ordem inferior |
short |
long |
Extensão de sinal |
short |
unsigned char |
Preserva o byte de ordem inferior |
short |
unsigned short |
Preserva o padrão de bits; o bit de ordem superior perde a função como bit de sinal |
short |
unsigned long |
Extensão de sinal para long; converte long em unsigned long |
short |
float |
Extensão de sinal para long; converte long em float |
short |
double |
Extensão de sinal para long; converte long em double |
short |
long double |
Extensão de sinal para long; converte long em double |
long |
char |
Preserva o byte de ordem inferior |
long |
short |
Preserva a palavra de ordem inferior |
long |
unsigned char |
Preserva o byte de ordem inferior |
long |
unsigned short |
Preserva a palavra de ordem inferior |
long |
unsigned long |
Preserva o padrão de bits; o bit de ordem superior perde a função como bit de sinal |
long |
float |
É representado como float. Se long não pode ser representado exatamente, alguma precisão é perdida. |
long |
double |
É representado como double. Se long não pode ser representado exatamente como um double, alguma precisão é perdida. |
long |
long double |
É representado como double. Se long não pode ser representado exatamente como um double, alguma precisão é perdida. |
1. Todas as entradas de char pressupõem que, por padrão, o tipo char tem sinal.
Específico da Microsoft
Para o compilador de C de 32 bits da Microsoft, um inteiro é equivalente a um long. A conversão de um valor int é realizada da mesma forma que para um long.
FIM de Específico da Microsoft