對於便攜性可以使用:
limits.h中
#define LNG_BIT (sizeof(long) * CHAR_BIT)
unsigned long num = 1UL << (LNG_BIT - 1);
得到 「低INT」,有點像?:
#define INT_BIT (sizeof(int) * CHAR_BIT)
if (LNG_BIT > INT_BIT)
return num & (~0UL >> INT_BIT);
else
return num;
或
num &= ~(~0U << INT_BIT);
或者,使用面膜,等等取決於爲什麼,爲了什麼等你想要的int位。
另請注意編譯器提供的選項;即如果你正在使用gcc:
-m32
-m64
-mx32
生成的代碼爲32位或64位環境。
*的-m32選項集INT,長和指針類型爲32位,併產生任何I386系統上運行的代碼。
* -m64選項將int設置爲32位,將長指針和指針類型設置爲64位,並生成x86-64體系結構的代碼。對於達爾文,只有-m64選項也會關閉-fno-pic和-mdynamic-no-pic選項。
* -mx32選項將int,long和指針類型設置爲32位,並生成x86-64體系結構的代碼。
還有-maddress-mode=long
等
-maddress模式=長
產生用於長地址模式的代碼。這僅適用於64位和x32環境。這是64位環境的默認地址模式。
嘗試:'無符號長NUM = 1UL << 63;' – Mysticial 2012-04-06 06:48:37
@Mysticial爲什麼不張貼與整數促進東西沿着一個答案? – cnicutar 2012-04-06 06:50:19
取決於使用哪個編譯器。即使在64位機器上運行,許多遺留編譯器也會缺省爲32位。在再試一次之前確認'sizeof num'是8。 – wallyk 2012-04-06 06:51:04