Conversões de tipos Integral não assinado
Um inteiro sem sinal é convertido para um número menor inteiro não assinado ou assinado truncando os bits de ordem superior, ou para um mais não assinado ou assinado inteiro, estendendo a zero (consulte a conversões de tipos inteiro sem sinal tabela).
Quando o valor com tipo integral é rebaixado para um inteiro assinado com tamanho menor, ou um inteiro sem sinal é convertido para o inteiro assinado de seu correspondente, o valor é inalterado, se ele pode ser representado no novo tipo.No entanto, o valor que representa as alterações se o bit de sinal for definido, como no exemplo a seguir.
int j;
unsigned short k = 65533;
j = k;
printf_s( "%hd\n", j ); // Prints -3
Se ele não pode ser representado, o resultado é definidos na implementação.Consulte Conversões de conversão de tipo para obter informações sobre o tratamento do compilador C Microsoft do rebaixamento de inteiros.Os mesmos resultados comportamento de conversão de inteiro ou de tipo para o inteiro a projeção.
Valores não assinados são convertidos de modo que preserva seu valor e, portanto, não é representáveis diretamente no c.A única exceção é uma conversão de unsigned long para float, que no máximo perde os bits de ordem baixa.Caso contrário, valor será preservado, sinal ou sem sinal.Quando um valor de tipo integral é convertido para flutuante, e o valor está fora do intervalo representáveis, o resultado é indefinido.(Consulte Armazenamento de tipos básicos para obter informações sobre o intervalo para os tipos integrais e de ponto flutuante.)
A tabela a seguir resume as conversões de tipos inteiro sem sinal.
Conversões de tipos não assinados Integral
From |
Para |
Método |
---|---|---|
unsigned char |
char |
Preservar o padrão de bits; bit de ordem superior torna-se o bit de sinal |
unsigned char |
short |
Estender a zero |
unsigned char |
long |
Estender a zero |
unsigned char |
unsigned short |
Estender a zero |
unsigned char |
unsigned long |
Estender a zero |
unsigned char |
float |
Converter em longo; converter longo para float |
unsigned char |
double |
Converter em longo; converter longo para duplo |
unsigned char |
long double |
Converter em longo; converter longo para duplo |
unsigned short |
char |
Preservar o byte de ordem inferior |
unsigned short |
short |
Preservar o padrão de bits; bit de ordem superior torna-se o bit de sinal |
unsigned short |
long |
Estender a zero |
unsigned short |
unsigned char |
Preservar o byte de ordem inferior |
unsigned short |
unsigned long |
Estender a zero |
unsigned short |
float |
Converter em longo; converter longo para float |
unsigned short |
double |
Converter em longo; converter longo para duplo |
unsigned short |
long double |
Converter em longo; converter longo para duplo |
unsigned long |
char |
Preservar o byte de ordem inferior |
unsigned long |
short |
Preservar a palavra de ordem inferior |
unsigned long |
long |
Preservar o padrão de bits; bit de ordem superior torna-se o bit de sinal |
unsigned long |
unsigned char |
Preservar o byte de ordem inferior |
unsigned long |
unsigned short |
Preservar a palavra de ordem inferior |
unsigned long |
float |
Converter em longo; converter longo para float |
unsigned long |
double |
Converter diretamente ao duplo |
unsigned long |
long double |
Converter em longo; converter longo para duplo |
Específicos do Microsoft
Para o compilador C Microsoft 32 bits, o unsigned int tipo será equivalente do unsigned long tipo.Conversão de um unsigned int valor procede da mesma forma como a conversão de um unsigned long.Conversões de unsigned long valores para float não são precisos, se o valor que está sendo convertido é maior do que o positivo máximo assinado longo valor.
Específicos do Microsoft final