为了便携性,您可以使用:
限制.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、long 和指针类型设置为 32 位,并生成可在任何 i386 系统上运行的代码。
* -m64 选项将 int 设置为 32 位,将 long 和指针类型设置为 64 位,并为 x86-64 架构生成代码。对于 Darwin,只有 -m64 选项也会关闭 -fno-pic 和 -mdynamic-no-pic 选项。
* -mx32 选项将 int、long 和指针类型设置为 32 位,并为 x86-64 架构生成代码。
还有-maddress-mode=long
等等。
-maddress-mode=long
为长地址模式生成代码。这仅支持 64 位和 x32 环境。它是 64 位环境的默认地址模式。