Conversões de tipos integrais com sinal
Quando um inteiro com sinal é convertido em um inteiro ou um tipo de ponto flutuante, o valor fica inalterado quando é representável no tipo de resultado.
Quando um inteiro com sinal é convertido em um inteiro de maior tamanho, o valor terá extensão de sinal. 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:
int i = -3;
unsigned short u;
u = i;
printf_s( "%hu\n", u ); // Prints 65533
Quando o compilador converte um inteiro com 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.
Para obter informações sobre os tamanhos para os tipos integral e de ponto flutuante, confira Armazenamento de tipos básicos.
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 Conversões de tipos integrais sem sinal para o tipo unsigned char
serão aplicadas no lugar das conversões indicadas nesta tabela.
Seção específica da Microsoft
No compilador da Microsoft, int
e long
são tipos distintos, mas equivalentes. A conversão de um valor int
é realizada da mesma maneira que a conversão de um long
.
Fim da seção específica da Microsoft
Tabela de conversões de tipos integrais assinados
De | Para | Método |
---|---|---|
char 1 |
short |
Extensão de sinal |
char |
long |
Extensão de sinal |
char |
long 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 |
unsigned long long |
Extensão de sinal para long long ; converte long long em unsigned long long |
char |
float |
Representar exatamente como float |
char |
double |
Representar exatamente como double |
char |
long double |
Representar exatamente como long double |
short |
char |
Preserva o byte de ordem inferior |
short |
long |
Extensão de sinal |
short |
long 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 |
unsigned long long |
Extensão de sinal para long long ; converte long long em unsigned long long |
short |
float |
Representar exatamente como float |
short |
double |
Representar exatamente como double |
short |
long double |
Representar exatamente como long double |
long |
char |
Preserva o byte de ordem inferior |
long |
short |
Preserva a palavra de ordem inferior |
long |
long long |
Extensão de sinal |
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 |
unsigned long long |
Extensão de sinal para long long ; converte long long em unsigned long long |
long |
float |
Representar como float . Se long não puder ser representado exatamente, um pouco da precisão será perdido. |
long |
double |
Representar exatamente como double |
long |
long double |
Representar exatamente como long double |
long long |
char |
Preserva o byte de ordem inferior |
long long |
short |
Preserva a palavra de ordem inferior |
long long |
long |
Preservar dword de ordem inferior |
long long |
unsigned char |
Preserva o byte de ordem inferior |
long long |
unsigned short |
Preserva a palavra de ordem inferior |
long long |
unsigned long |
Preservar dword de ordem inferior |
long long |
unsigned long long |
Preserva o padrão de bits; o bit de ordem superior perde a função como bit de sinal |
long long |
float |
Representar como float . Se long long não puder ser representado exatamente, um pouco da precisão será perdido. |
long long |
double |
Representar como double . Se long long não puder ser representado exatamente como um double , um pouco da precisão será perdido. |
long long |
long double |
Representar como double . Se long long não puder ser representado exatamente como um double , um pouco da precisão será perdido. |
1 Todas as entradas de char
pressupõem que, por padrão, o tipo char
tem sinal.