long 値の割り当て

limits.h 標準ライブラリー・ヘッダー・ファイルで定義される long 型整数の限界は、次の表で示すように、32 ビット・モードと 64 ビット・モードでは異なります。

表 1. 32 ビット・モードおよび 64 ビット・モードにおける長整数の定数限界
シンボリック
定数
モード 16 進数 10 進数
LONG_MIN (signed long の最小値) 32 ビット –(231) 0x80000000L –2,147,483,648
64 ビット –(263) 0x8000000000000000L –9,223,372,036,854,775,808
LONG_MAX (signed long の最大値) 32 ビット 231–1 0x7FFFFFFFL +2,147,483,647
64 ビット 263–1 0x7FFFFFFFFFFFFFFFL +9,223,372,036,854,775,807
ULONG_MAX (unsigned long の最大値) 32 ビット 232–1 0xFFFFFFFFUL +4,294,967,295
64 ビット 264–1 0xFFFFFFFFFFFFFFFFUL +18,446,744,073,709,551,615

この違いにより、次のような現象が生じます。

他の変数に割り当てたり、関数に渡されるときに long 値がオーバーフローする場合は、以下を行う必要があります。