Conversões de tipos integrais sem sinal
Quando um inteiro sem sinal é convertido em um tipo inteiro ou de ponto flutuante, se o valor original for representável no tipo de resultado, o valor será inalterado.
Quando o compilador converte um inteiro sem sinal em um inteiro de tamanho maior, o valor é estendido com zero. Quando convertidos em um inteiro de tamanho menor, os bits de alta ordem são truncados. O resultado é interpretado usando o tipo de resultado, conforme mostrado neste exemplo:
unsigned k = 65533;
short j;
j = k;
printf_s( "%hd\n", j ); // Prints -3
Quando o compilador converter um inteiro sem sinal em um tipo de ponto flutuante, se o valor original não for representável exatamente no tipo de resultado, o resultado será o próximo valor representável maior ou menor.
Consulte Armazenamento de tipos básicos para obter informações sobre os tamanhos de tipos integrais e de ponto flutuante.
Seção específica da Microsoft
No compilador da Microsoft, unsigned
(ou unsigned int
) e unsigned long
são tipos distintos, mas equivalentes. A conversão de um valor unsigned int
é realizada da mesma maneira que a conversão de um unsigned long
.
Fim da seção específica da Microsoft
A tabela a seguir resume as conversões de tipos integrais sem sinal.
Tabela de conversões de tipos integrais sem sinal
De | Para | Método |
---|---|---|
unsigned char |
char |
Preserva o padrão de bits; o bit de ordem superior torna-se o bit de sinal |
unsigned char |
short |
Extensão de zero |
unsigned char |
long |
Extensão de zero |
unsigned char |
long long |
Extensão de zero |
unsigned char |
unsigned short |
Extensão de zero |
unsigned char |
unsigned long |
Extensão de zero |
unsigned char |
unsigned long long |
Extensão de zero |
unsigned char |
float |
Converter exatamente em float |
unsigned char |
double |
Converter exatamente em double |
unsigned char |
long double |
Converter exatamente em long double |
unsigned short |
char |
Preserva o byte de ordem inferior |
unsigned short |
short |
Preserva o padrão de bits; o bit de ordem superior torna-se o bit de sinal |
unsigned short |
long |
Extensão de zero |
unsigned short |
long long |
Extensão de zero |
unsigned short |
unsigned char |
Preserva o byte de ordem inferior |
unsigned short |
unsigned long |
Extensão de zero |
unsigned short |
unsigned long long |
Extensão de zero |
unsigned short |
float |
Converter exatamente em float |
unsigned short |
double |
Converter exatamente em double |
unsigned short |
long double |
Converter exatamente em long double |
unsigned long |
char |
Preserva o byte de ordem inferior |
unsigned long |
short |
Preserva a palavra de ordem inferior |
unsigned long |
long |
Preserva o padrão de bits; o bit de ordem superior torna-se o bit de sinal |
unsigned long |
long long |
Extensão de zero |
unsigned long |
unsigned char |
Preserva o byte de ordem inferior |
unsigned long |
unsigned short |
Preserva a palavra de ordem inferior |
unsigned long |
unsigned long long |
Extensão de zero |
unsigned long |
float |
Converter no representável float mais próximo |
unsigned long |
double |
Converter exatamente em double |
unsigned long |
long double |
Converter exatamente em long double |
unsigned long long |
char |
Preserva o byte de ordem inferior |
unsigned long long |
short |
Preserva a palavra de ordem inferior |
unsigned long long |
long |
Preservar dword de ordem inferior |
unsigned long long |
long long |
Preserva o padrão de bits; o bit de ordem superior torna-se o bit de sinal |
unsigned long long |
unsigned char |
Preserva o byte de ordem inferior |
unsigned long long |
unsigned short |
Preserva a palavra de ordem inferior |
unsigned long long |
unsigned long |
Preservar dword de ordem inferior |
unsigned long long |
float |
Converter no representável float mais próximo |
unsigned long long |
double |
Converter no representável double mais próximo |
unsigned long long |
long double |
Converter no representável long double mais próximo |