2.4.4 整数および長整数リテラル

整数および長整数リテラルは以下の字句定義で記述されます:

longinteger  ::=  integer ("l" | "L")
integer  ::=  decimalinteger | octinteger | hexinteger
decimalinteger  ::=  nonzerodigit digit* | "0"
octinteger  ::=  "0" octdigit+
hexinteger  ::=  "0" ("x" | "X") hexdigit+
nonzerodigit  ::=  "1"..."9"
octdigit  ::=  "0"..."7"
hexdigit  ::=  digit | "a"..."f" | "A"..."F"
Download entire grammar as text.

長整数を表す末尾の文字は小文字の "l" でも大文字の "L" でもかまいませんが、"l" は "1" に良く似ているので、 常に "L" を使うよう強く勧めます。

整数で表現できる最大の値よりも大きい整数の 10 進表現リテラル (例えば 32-bit 整数を使っている場合には 2147483647) は、 長整数として表現できる値であれば受理されます。8 進および 16 進数 のリテラルも同様にふるまいますが、整数で表現できる最大の値よりも大きく、 かつ (32-bit 算術演算を使う計算機では) 符号無しの 32-bit の整数で表現 できる最大の値、4294967296 までの間では、符号無し 32-bit 整数としての 値から 4294967296 を引いて得られる負の整数値になります。 値がメモリ上に収まるかどうかという問題を除けば、長整数リテラルには値域の 制限がありません。例えば、0xdeadbeef は 32-bit の計算機では -559038737 という値とみなされ、0xdeadbeeffeed は 244837814107885L であるとみなされます。

整数リテラル (最初の行) と長整数リテラル (二行目および三行目) の例を 以下に示します:

7     2147483647                        0177    0x80000000
3L    79228162514264337593543950336L    0377L   0x100000000L
      79228162514264337593543950336             0xdeadbeeffeed

ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。