移植性のために、次を使用できます。
制限.h
#define LNG_BIT (sizeof(long) * CHAR_BIT)
unsigned long num = 1UL << (LNG_BIT - 1);
「 low 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 ビット環境のデフォルトのアドレス モードです。