共用方式為


從帶正負號整數型別的轉換

當帶正負號的整數轉換成整數或浮點類型時,如果值在結果類型中可表示,則值不會變更。

當帶正負號的整數轉換成大小較大的整數時,此值會以正負號延伸。 轉換成大小較小的整數時,會截斷高階位。 結果會使用結果類型來解譯,如下列範例所示:

int i = -3;
unsigned short u;

u = i;
printf_s( "%hu\n", u );  // Prints 65533

當編譯程式將帶正負號的整數轉換成浮點類型時,如果原始值無法完全在結果類型中表示,則結果會是下一個較高或較低的可表示值。

如需整數和浮點類型大小的相關信息,請參閱 基本類型的記憶體。

下表摘要說明從帶正負號整數類資料類型進行轉換。 它假設 char 類型預設為已簽署。 如果您使用編譯時間選項將型別的預設值char變更為 unsigned,則會套用類型之 [從未帶正負號整數型別轉換] 資料表unsigned char提供的轉換,而不是此數據表中的轉換。

Microsoft 特定的

在Microsoft編譯程式中, intlong 是相異但相等的類型。 值的int轉換會以與 轉換相同的方式進行。long

END Microsoft 特定的

帶正負號整數型別的轉換數據表

方法
char1 short 正負號擴充
char long 正負號擴充
char long long 正負號擴充
char unsigned char 保留模式,高序位位元會遺失,做為正負號位元使用
char unsigned short 將簽署延伸至 short;轉換為shortunsigned short
char unsigned long 將簽署延伸至 long;轉換為longunsigned long
char unsigned long long 將簽署延伸至 long long;轉換為long longunsigned 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;轉換為longunsigned long
short unsigned long long 將簽署延伸至 long long;轉換為long longunsigned 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 longunsigned 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 類型預設為帶正負號。

另請參閱

指派轉換