Conversioni dai tipi integrali senza segno
Quando un intero senza segno viene convertito in un tipo integer o a virgola mobile, se il valore originale è rappresentabile nel tipo di risultato il valore rimane invariato.
Quando il compilatore converte un intero senza segno in un numero intero di dimensioni maggiori, il valore è esteso zero. Quando viene convertito in un numero intero di dimensioni inferiori, i bit di ordine elevato vengono troncati. Il risultato viene interpretato usando il tipo di risultato, come illustrato in questo esempio:
unsigned k = 65533;
short j;
j = k;
printf_s( "%hd\n", j ); // Prints -3
Quando il compilatore converte un intero senza segno in un tipo a virgola mobile, se il valore originale non è rappresentabile esattamente nel tipo di risultato, il risultato è il valore rappresentabile superiore o inferiore successivo.
Per informazioni sulle dimensioni dei tipi integrali e a virgola mobile, vedere Archiviazione di tipi di base.
Sezione specifica Microsoft
Nel compilatore Microsoft ( unsigned
o unsigned int
) e unsigned long
sono tipi distinti ma equivalenti. La conversione di un valore unsigned int
viene eseguita nello stesso modo di una conversione di un unsigned long
.
Fine sezione specifica Microsoft
Nella tabella seguente sono riepilogate le conversioni dai tipi integrali senza segno.
Tabella delle conversioni da tipi integrali senza segno
Da | Per | metodo |
---|---|---|
unsigned char |
char |
Viene mantenuto lo schema di bit; il bit più significativo diventa il bit di segno |
unsigned char |
short |
Estensione zero |
unsigned char |
long |
Estensione zero |
unsigned char |
long long |
Estensione zero |
unsigned char |
unsigned short |
Estensione zero |
unsigned char |
unsigned long |
Estensione zero |
unsigned char |
unsigned long long |
Estensione zero |
unsigned char |
float |
Converti esattamente in float |
unsigned char |
double |
Converti esattamente in double |
unsigned char |
long double |
Converti esattamente in long double |
unsigned short |
char |
Mantenimento del byte meno significativo |
unsigned short |
short |
Viene mantenuto lo schema di bit; il bit più significativo diventa il bit di segno |
unsigned short |
long |
Estensione zero |
unsigned short |
long long |
Estensione zero |
unsigned short |
unsigned char |
Mantenimento del byte meno significativo |
unsigned short |
unsigned long |
Estensione zero |
unsigned short |
unsigned long long |
Estensione zero |
unsigned short |
float |
Converti esattamente in float |
unsigned short |
double |
Converti esattamente in double |
unsigned short |
long double |
Converti esattamente in long double |
unsigned long |
char |
Mantenimento del byte meno significativo |
unsigned long |
short |
Mantenimento della parola meno significativa |
unsigned long |
long |
Viene mantenuto lo schema di bit; il bit più significativo diventa il bit di segno |
unsigned long |
long long |
Estensione zero |
unsigned long |
unsigned char |
Mantenimento del byte meno significativo |
unsigned long |
unsigned short |
Mantenimento della parola meno significativa |
unsigned long |
unsigned long long |
Estensione zero |
unsigned long |
float |
Convertire in rappresentabile più vicino float |
unsigned long |
double |
Converti esattamente in double |
unsigned long |
long double |
Converti esattamente in long double |
unsigned long long |
char |
Mantenimento del byte meno significativo |
unsigned long long |
short |
Mantenimento della parola meno significativa |
unsigned long long |
long |
Mantieni dword con ordine basso |
unsigned long long |
long long |
Viene mantenuto lo schema di bit; il bit più significativo diventa il bit di segno |
unsigned long long |
unsigned char |
Mantenimento del byte meno significativo |
unsigned long long |
unsigned short |
Mantenimento della parola meno significativa |
unsigned long long |
unsigned long |
Mantieni dword con ordine basso |
unsigned long long |
float |
Convertire in rappresentabile più vicino float |
unsigned long long |
double |
Convertire in rappresentabile più vicino double |
unsigned long long |
long double |
Convertire in rappresentabile più vicino long double |