從不帶正負號整數型別的轉換
當不帶正負號的整數轉換成整數或浮點類型時,如果原始值在結果類型中可表示,則值不會變更。
當編譯程式將不帶正負號的整數轉換成大小較大的整數時,此值會是零擴充的。 轉換成大小較小的整數時,會截斷高階位。 結果會使用結果類型來解譯,如下列範例所示:
unsigned k = 65533;
short j;
j = k;
printf_s( "%hd\n", j ); // Prints -3
當編譯程式將不帶正負號的整數轉換成浮點類型時,如果原始值無法完全在結果類型中表示,則結果會是下一個較高或較低的可表示值。
如需整數和浮點類型大小的相關信息,請參閱 基本類型的 儲存。
Microsoft 特定的
在Microsoft編譯程式中, unsigned
(或 unsigned int
) 和 unsigned long
是相異但相等的類型。 unsigned int
值的轉換與 unsigned long
的轉換使用相同的方式進行。
END Microsoft 特定的
下表摘要說明從不帶正負號整數類資料類型進行轉換。
從不帶正負號整數型別轉換的數據表
從 | 至 | 方法 |
---|---|---|
unsigned char |
char |
保留位元模式,高序位位元會變成正負號位元 |
unsigned char |
short |
零擴充 |
unsigned char |
long |
零擴充 |
unsigned char |
long long |
零擴充 |
unsigned char |
unsigned short |
零擴充 |
unsigned char |
unsigned long |
零擴充 |
unsigned char |
unsigned long long |
零擴充 |
unsigned char |
float |
完全轉換成 float |
unsigned char |
double |
完全轉換成 double |
unsigned char |
long double |
完全轉換成 long double |
unsigned short |
char |
保留低序位位元組 |
unsigned short |
short |
保留位元模式,高序位位元會變成正負號位元 |
unsigned short |
long |
零擴充 |
unsigned short |
long long |
零擴充 |
unsigned short |
unsigned char |
保留低序位位元組 |
unsigned short |
unsigned long |
零擴充 |
unsigned short |
unsigned long long |
零擴充 |
unsigned short |
float |
完全轉換成 float |
unsigned short |
double |
完全轉換成 double |
unsigned short |
long double |
完全轉換成 long double |
unsigned long |
char |
保留低序位位元組 |
unsigned long |
short |
保留低序位字組 |
unsigned long |
long |
保留位元模式,高序位位元會變成正負號位元 |
unsigned long |
long long |
零擴充 |
unsigned long |
unsigned char |
保留低序位位元組 |
unsigned long |
unsigned short |
保留低序位字組 |
unsigned long |
unsigned long long |
零擴充 |
unsigned long |
float |
轉換為最接近的可表示 float |
unsigned long |
double |
完全轉換成 double |
unsigned long |
long double |
完全轉換成 long double |
unsigned long long |
char |
保留低序位位元組 |
unsigned long long |
short |
保留低序位字組 |
unsigned long long |
long |
保留低序 dword |
unsigned long long |
long long |
保留位元模式,高序位位元會變成正負號位元 |
unsigned long long |
unsigned char |
保留低序位位元組 |
unsigned long long |
unsigned short |
保留低序位字組 |
unsigned long long |
unsigned long |
保留低序 dword |
unsigned long long |
float |
轉換為最接近的可表示 float |
unsigned long long |
double |
轉換為最接近的可表示 double |
unsigned long long |
long double |
轉換為最接近的可表示 long double |