Partilhar via


Conversões de tipos integrais não assinados

Um inteiro sem sinal é convertido em um inteiro com ou sem sinal mais curto por meio do truncamento dos bits de ordem superior; ou é convertido em um inteiro com ou sem sinal mais longo por meio da extensão de zero (consulte a tabela de conversões de tipos integrais sem sinal).

Quando o valor com tipo integral é rebaixado para um inteiro com sinal de tamanho menor, ou um inteiro sem sinal é convertido no inteiro com sinal correspondente, o valor não será alterado se ele puder ser representado no novo tipo. No entanto, o valor que ele representa mudará 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 puder ser representado, o resultado será definido na implementação. Consulte o tópico sobre conversões de tipos (estilo cast) para obter informações sobre como o compilador de C da Microsoft manipula o rebaixamento de números inteiros. O mesmo comportamento resulta da conversão regular do inteiro ou da conversão de tipo ("cast") do inteiro.

Os valores sem sinal são convertidos de uma maneira que preserva o valor e não pode ser representada diretamente em C. A única exceção é uma conversão de unsigned long em float, que perde, no máximo, os bits de ordem inferior. Caso contrário, o valor é preservado, com ou sem sinal. Quando um valor de tipo integral é convertido em flutuante e está fora do intervalo representável, o resultado é indefinido. (Consulte Armazenamento de tipos básicos para obter informações sobre o intervalo para os tipos integral e de ponto flutuante.)

A tabela a seguir resume as conversões de tipos integrais sem sinal.

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

unsigned short

Extensão de zero

unsigned char

unsigned long

Extensão de zero

unsigned char

float

Converte em long; converte long em float

unsigned char

double

Converte em long; converte long em double

unsigned char

long double

Converte em long; converte long em 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

unsigned char

Preserva o byte de ordem inferior

unsigned short

unsigned long

Extensão de zero

unsigned short

float

Converte em long; converte long em float

unsigned short

double

Converte em long; converte long em double

unsigned short

long double

Converte em long; converte long em 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

unsigned char

Preserva o byte de ordem inferior

unsigned long

unsigned short

Preserva a palavra de ordem inferior

unsigned long

float

Converte em long; converte long em float

unsigned long

double

Converte diretamente em double

unsigned long

long double

Converte em long; converte long em double

Específico da Microsoft

Para o compilador de C de 32 bits da Microsoft, o tipo unsigned int é equivalente ao tipo unsigned long. A conversão de um valor unsigned int é realizada da mesma maneira que a conversão de um unsigned long. As conversões de valores unsigned long em float não serão precisas se o valor que estiver sendo convertido for maior do que o valor long positivo máximo com sinal.

FIM de Específico da Microsoft

Consulte também

Conceitos

Conversões de atribuição