##
2.4.4 Integer and long integer literals

Integer and long integer literals are described by the following lexical definitions:

  `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.

Although both lower case `l' and upper case `L' are allowed as suffix for long integers, it is strongly recommended to always use `L', since the letter `l' looks too much like the digit `1'.

Plain integer decimal literals must be at most 2147483647 (i.e., the largest positive integer, using 32-bit arithmetic). Plain octal and hexadecimal literals may be as large as 4294967295, but values larger than 2147483647 are converted to a negative value by subtracting 4294967296. There is no limit for long integer literals apart from what can be stored in available memory.

Some examples of plain and long integer literals:

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