Conversioni dai tipi integrali con segno
Quando un intero con segno viene convertito in un intero o in un tipo a virgola mobile, il valore viene modificato se rappresentabile nel tipo di risultato.
Quando un intero con segno viene convertito in un numero intero di dimensioni maggiori, il valore viene esteso con segno. 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:
int i = -3;
unsigned short u;
u = i;
printf_s( "%hu\n", u ); // Prints 65533
Quando il compilatore converte un intero con 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.
Nella tabella seguente sono riepilogate le conversioni dai tipi integrali con segno. Si presuppone che il char
tipo sia firmato per impostazione predefinita. Se si usa un'opzione in fase di compilazione per modificare l'impostazione predefinita per il char
tipo su unsigned, le conversioni fornite nella tabella Conversioni da tipi integrali non firmati per il unsigned char
tipo si applicano, anziché le conversioni in questa tabella.
Sezione specifica Microsoft
Nel compilatore int
Microsoft e long
sono tipi distinti ma equivalenti. La conversione di un int
valore procede nello stesso modo della conversione di un oggetto long
.
Fine sezione specifica Microsoft
Tabella delle conversioni da tipi integrali firmati
Da | Per | metodo |
---|---|---|
char 1 |
short |
Estensione del segno |
char |
long |
Estensione del segno |
char |
long long |
Estensione del segno |
char |
unsigned char |
Mantenimento del modello; il bit più significativo perde la funzione come bit di segno |
char |
unsigned short |
Estensione del segno in short ; conversione short in unsigned short |
char |
unsigned long |
Estensione del segno in long ; conversione long in unsigned long |
char |
unsigned long long |
Estensione del segno in long long ; conversione long long in unsigned long long |
char |
float |
Rappresentare esattamente come float |
char |
double |
Rappresentare esattamente come double |
char |
long double |
Rappresentare esattamente come long double |
short |
char |
Mantenimento del byte meno significativo |
short |
long |
Estensione del segno |
short |
long long |
Estensione del segno |
short |
unsigned char |
Mantenimento del byte meno significativo |
short |
unsigned short |
Mantenimento del modello di bit; il bit più significativo perde la funzione come bit di segno |
short |
unsigned long |
Estensione del segno in long ; conversione long in unsigned long |
short |
unsigned long long |
Estensione del segno in long long ; conversione long long in unsigned long long |
short |
float |
Rappresentare esattamente come float |
short |
double |
Rappresentare esattamente come double |
short |
long double |
Rappresentare esattamente come long double |
long |
char |
Mantenimento del byte meno significativo |
long |
short |
Mantenimento della parola meno significativa |
long |
long long |
Estensione del segno |
long |
unsigned char |
Mantenimento del byte meno significativo |
long |
unsigned short |
Mantenimento della parola meno significativa |
long |
unsigned long |
Mantenimento del modello di bit; il bit più significativo perde la funzione come bit di segno |
long |
unsigned long long |
Estensione del segno in long long ; conversione long long in unsigned long long |
long |
float |
Rappresenta come float . Se long non è possibile rappresentare esattamente, la precisione viene persa. |
long |
double |
Rappresentare esattamente come double |
long |
long double |
Rappresentare esattamente come long double |
long long |
char |
Mantenimento del byte meno significativo |
long long |
short |
Mantenimento della parola meno significativa |
long long |
long |
Mantieni dword con ordine basso |
long long |
unsigned char |
Mantenimento del byte meno significativo |
long long |
unsigned short |
Mantenimento della parola meno significativa |
long long |
unsigned long |
Mantieni dword con ordine basso |
long long |
unsigned long long |
Mantenimento del modello di bit; il bit più significativo perde la funzione come bit di segno |
long long |
float |
Rappresenta come float . Se long long non è possibile rappresentare esattamente, la precisione viene persa. |
long long |
double |
Rappresenta come double . Se long long non può essere rappresentato esattamente come , double viene persa una certa precisione. |
long long |
long double |
Rappresenta come double . Se long long non può essere rappresentato esattamente come , double viene persa una certa precisione. |
1 Tutte le char
voci presuppongono che il char
tipo sia firmato per impostazione predefinita.