從帶正負號整數類型的轉換
將帶正負號的整數轉換為大小相等或大小較大的不帶正負號整數時,若帶正負號整數值不為負值,則其值不變。 轉換是透過帶正負號整數的帶正負號擴充方式所進行。 若將帶正負號整數轉換為較短的帶正負號整數,則會截斷高序位的位元。 其結果會解譯為不帶正負號的值,如此範例中所示。
int i = -3;
unsigned short u;
u = i;
printf_s( "%hu\n", u ); // Prints 65533
將帶正負號的整數轉換成浮動值時不會遺失資訊,不過,將 long int 或 unsigned long int 值轉換成 float 值時,可能會遺失一些精確度。
下表摘要說明從帶正負號整數類資料類型進行轉換。 此表假設 char 類型預設為帶正負號值。 如果您使用編譯時期選項來將 char 類型的預設值變更為不帶正負號類型,則在從不帶正負號的整數類型轉換表中,針對unsigned char 類型所套用的轉換會改為下表 (從帶正負號的整數類型轉換) 中所述的轉換。
從帶正負號的整數類型轉換
從 |
轉換為 |
方法 |
---|---|---|
char1 |
short |
正負號擴充 |
char |
long |
正負號擴充 |
char |
unsigned char |
保留模式,高序位位元會遺失,做為正負號位元使用 |
char |
unsigned short |
對 short 進行正負號擴充,將 short 轉換為 unsigned short |
char |
unsigned long |
對 long 進行正負號擴充,將 long 轉換為 unsigned long |
char |
float |
對 long 進行正負號擴充,將 long 轉換為 float |
char |
double |
對 long 進行正負號擴充,將 long 轉換為 double |
char |
long double |
對 long 進行正負號擴充,將 long 轉換為 double |
short |
char |
保留低序位位元組 |
short |
long |
正負號擴充 |
short |
unsigned char |
保留低序位位元組 |
short |
unsigned short |
保留位元模式,高序位位元會遺失,做為正負號位元使用 |
short |
unsigned long |
對 long 進行正負號擴充,將 long 轉換為 unsigned long |
short |
float |
對 long 進行正負號擴充,將 long 轉換為 float |
short |
double |
對 long 進行正負號擴充,將 long 轉換為 double |
short |
long double |
對 long 進行正負號擴充,將 long 轉換為 double |
long |
char |
保留低序位位元組 |
long |
short |
保留低序位字組 |
long |
unsigned char |
保留低序位位元組 |
long |
unsigned short |
保留低序位字組 |
long |
unsigned long |
保留位元模式,高序位位元會遺失,做為正負號位元使用 |
long |
float |
表示為 float。 如果無法正確地表示 long,則會遺失一些精確度。 |
long |
double |
表示為 double。 如果無法將 long 表示為與 double 完全相同,則會遺失一些精確度。 |
long |
long double |
表示為 double。 如果無法將 long 表示為與 double 完全相同,則會遺失一些精確度。 |
1. 所有 char 項目皆假設 char 類型預設為帶正負號值。
Microsoft 特定的
對於 Microsoft 32 位元 C 編譯器,整數相當於 long。 int 值進行的轉換與 long 的轉換相同。
END Microsoft 特定的