整数および長整数リテラルは以下の字句定義で記述されます:
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" |
長整数を表す末尾の文字は小文字の "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
ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。