Conversões de tipos Integral assinado
Quando um inteiro assinado é convertido para um inteiro não assinado com tamanho igual ou maior e o valor do inteiro assinado não for negativo, o valor é alterado.A conversão é feita pelo sinal-estendendo o inteiro assinado.Um inteiro assinado é convertido para um inteiro assinado de menor truncando os bits de ordem superior.O resultado é interpretado como um valor não assinado, como 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 assinado é convertido em um valor flutuante, exceto pelo fato de alguns precision pode ser perdida quando um long int ou unsigned int longo o valor é convertido em um float valor.
A tabela a seguir resume as conversões de tipos integrais assinados.Esta tabela presume que o char tipo é assinado por padrão.Se você usar uma opção de tempo de compilação para alterar o padrão para o char para não assinado, as conversões de tipos fornecidas na conversões de tipos inteiro sem sinal tabela para o unsigned char tipo aplicam-se em vez das conversões na tabela a seguir, as conversões de tipos integrais assinado.
Conversões de tipos assinados Integral
From |
Para |
Método |
---|---|---|
char1 |
short |
Estender o sinal |
char |
long |
Estender o sinal |
char |
unsigned char |
Preservar o padrão; função perde o bit de ordem superior como bit de sinal |
char |
unsigned short |
Estender sinal para curto; converter curto para unsigned short |
char |
unsigned long |
Estender sinal para longo; converter longo paraunsigned long |
char |
float |
Estender sinal para longo; converter longo para float |
char |
double |
Estender sinal para longo; converter longo para duplo |
char |
long double |
Estender sinal para longo; converter longo para duplo |
short |
char |
Preservar o byte de ordem inferior |
short |
long |
Estender o sinal |
short |
unsigned char |
Preservar o byte de ordem inferior |
short |
unsigned short |
Preservar o padrão de bits; função perde o bit de ordem superior como bit de sinal |
short |
unsigned long |
Estender sinal para longo; converter longo paraunsigned long |
short |
float |
Estender sinal para longo; converter longo para float |
short |
double |
Estender sinal para longo; converter longo para duplo |
short |
long double |
Estender sinal para longo; converter longo para duplo |
long |
char |
Preservar o byte de ordem inferior |
long |
short |
Preservar a palavra de ordem inferior |
long |
unsigned char |
Preservar o byte de ordem inferior |
long |
unsigned short |
Preservar a palavra de ordem inferior |
long |
unsigned long |
Preservar o padrão de bits; função perde o bit de ordem superior como bit de sinal |
long |
float |
Representar como float.Se longo não pode ser representado exatamente, alguns precisão é perdida. |
long |
double |
Representar como double.Se longo não pode ser representada exatamente como um double, alguns precisão é perdida. |
long |
long double |
Representar como double.Se longo não pode ser representada exatamente como um double, alguns precisão é perdida. |
1.Todos os char entradas pressupõem que o char tipo é assinado por padrão.
Específicos do Microsoft
Para o compilador C Microsoft 32 bits, um número inteiro é equivalente a uma longo.Conversão de um int valor continua o mesmo para uma longo.
Específicos do Microsoft final