從帶正負號整數型別的轉換
當帶正負號的整數轉換成整數或浮點類型時,如果值在結果類型中可表示,則值不會變更。
當帶正負號的整數轉換成大小較大的整數時,此值會以正負號延伸。 轉換成大小較小的整數時,會截斷高階位。 結果會使用結果類型來解譯,如下列範例所示:
int i = -3;
unsigned short u;
u = i;
printf_s( "%hu\n", u ); // Prints 65533
當編譯程式將帶正負號的整數轉換成浮點類型時,如果原始值無法完全在結果類型中表示,則結果會是下一個較高或較低的可表示值。
如需整數和浮點類型大小的相關信息,請參閱 基本類型的記憶體。
下表摘要說明從帶正負號整數類資料類型進行轉換。 它假設 char
類型預設為已簽署。 如果您使用編譯時間選項將型別的預設值char
變更為 unsigned,則會套用類型之 [從未帶正負號整數型別轉換] 資料表unsigned char
中提供的轉換,而不是此數據表中的轉換。
Microsoft 特定的
在Microsoft編譯程式中, int
和 long
是相異但相等的類型。 值的int
轉換會以與 轉換相同的方式進行。long
END Microsoft 特定的
帶正負號整數型別的轉換數據表
從 | 至 | 方法 |
---|---|---|
char 1 |
short |
正負號擴充 |
char |
long |
正負號擴充 |
char |
long long |
正負號擴充 |
char |
unsigned char |
保留模式,高序位位元會遺失,做為正負號位元使用 |
char |
unsigned short |
將簽署延伸至 short ;轉換為short unsigned short |
char |
unsigned long |
將簽署延伸至 long ;轉換為long unsigned long |
char |
unsigned long long |
將簽署延伸至 long long ;轉換為long long unsigned long long |
char |
float |
以完全相同的方式表示 float |
char |
double |
以完全相同的方式表示 double |
char |
long double |
以完全相同的方式表示 long double |
short |
char |
保留低序位位元組 |
short |
long |
正負號擴充 |
short |
long long |
正負號擴充 |
short |
unsigned char |
保留低序位位元組 |
short |
unsigned short |
保留位元模式,高序位位元會遺失,做為正負號位元使用 |
short |
unsigned long |
將簽署延伸至 long ;轉換為long unsigned long |
short |
unsigned long long |
將簽署延伸至 long long ;轉換為long long unsigned long long |
short |
float |
以完全相同的方式表示 float |
short |
double |
以完全相同的方式表示 double |
short |
long double |
以完全相同的方式表示 long double |
long |
char |
保留低序位位元組 |
long |
short |
保留低序位字組 |
long |
long long |
正負號擴充 |
long |
unsigned char |
保留低序位位元組 |
long |
unsigned short |
保留低序位字組 |
long |
unsigned long |
保留位元模式,高序位位元會遺失,做為正負號位元使用 |
long |
unsigned long long |
將簽署延伸至 long long ;轉換為long long unsigned long long |
long |
float |
表示為 float 。 如果 long 無法完全表示,則會遺失某些精確度。 |
long |
double |
以完全相同的方式表示 double |
long |
long double |
以完全相同的方式表示 long double |
long long |
char |
保留低序位位元組 |
long long |
short |
保留低序位字組 |
long long |
long |
保留低序 dword |
long long |
unsigned char |
保留低序位位元組 |
long long |
unsigned short |
保留低序位字組 |
long long |
unsigned long |
保留低序 dword |
long long |
unsigned long long |
保留位元模式,高序位位元會遺失,做為正負號位元使用 |
long long |
float |
表示為 float 。 如果 long long 無法完全表示,則會遺失某些精確度。 |
long long |
double |
表示為 double 。 如果 long long 無法完全表示為 double ,則會遺失某些有效位數。 |
long long |
long double |
表示為 double 。 如果 long long 無法完全表示為 double ,則會遺失某些有效位數。 |
1 所有 char
專案都假設 char
類型預設為帶正負號。