##
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