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
char1 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.

Confira também

Conversões de atribuição