[lex.icon] (original) (raw)
5 Lexical conventions [lex]
5.13 Literals [lex.literal]
5.13.2 Integer literals [lex.icon]
integer-literal: binary-literal integer-suffix octal-literal integer-suffix decimal-literal integer-suffix hexadecimal-literal integer-suffix
binary-literal: 0b binary-digit 0B binary-digit binary-literal ' binary-digit
octal-literal: 0 octal-literal ' octal-digit
decimal-literal: nonzero-digit decimal-literal ' digit
hexadecimal-literal: hexadecimal-prefix hexadecimal-digit-sequence
binary-digit: one of 0 1
octal-digit: one of 0 1 2 3 4 5 6 7
nonzero-digit: one of 1 2 3 4 5 6 7 8 9
hexadecimal-prefix: one of 0x 0X
hexadecimal-digit-sequence: hexadecimal-digit hexadecimal-digit-sequence ' hexadecimal-digit
hexadecimal-digit: one of 0 1 2 3 4 5 6 7 8 9 a b c d e f A B C D E F
integer-suffix: unsigned-suffix long-suffix unsigned-suffix long-long-suffix long-suffix unsigned-suffix long-long-suffix unsigned-suffix
unsigned-suffix: one of u U
long-suffix: one of l L
long-long-suffix: one of ll LL
In an integer-literal, the sequence ofbinary-digits,octal-digits,digits, orhexadecimal-digits is interpreted as a base N integer as shown in table Table 7; the lexically first digit of the sequence of digits is the most significant.
[ Note
:
The prefix and any optional separating single quotes are ignored when determining the value.
— end note
]
Table 7: Base of integer-literals [tab:lex.icon.base]
| Kind of integer-literal | base N |
|---|---|
| binary-literal | 2 |
| octal-literal | 8 |
| decimal-literal | 10 |
| hexadecimal-literal | 16 |
The hexadecimal-digitsa through f and A through Fhave decimal values ten through fifteen.
[ Example
:
The number twelve can be written 12, 014,0XC, or 0b1100.
The integer-literals 1048576,1'048'576, 0X100000, 0x10'0000, and0'004'000'000 all have the same value.
— end example
]
The type of an integer-literal is the first type in the list in Table 8corresponding to its optional integer-suffixin which its value can be represented.
An integer-literal is a prvalue.
Table 8: Types of integer-literals [tab:lex.icon.type]
| integer-suffix | decimal-literal | integer-literal other than decimal-literal |
|---|---|---|
| none | int | int |
| long int | unsigned int | |
| long long int | long int | |
| unsigned long int | ||
| long long int | ||
| unsigned long long int | ||
| u or U | unsigned int | unsigned int |
| unsigned long int | unsigned long int | |
| unsigned long long int | unsigned long long int | |
| l or L | long int | long int |
| long long int | unsigned long int | |
| long long int | ||
| unsigned long long int | ||
| Both u or U | unsigned long int | unsigned long int |
| and l or L | unsigned long long int | unsigned long long int |
| ll or LL | long long int | long long int |
| unsigned long long int | ||
| Both u or U | unsigned long long int | unsigned long long int |
| and ll or LL |
If an integer-literalcannot be represented by any type in its list and an extended integer type ([basic.fundamental]) can represent its value, it may have that extended integer type.
If all of the types in the list for the integer-literalare signed, the extended integer type shall be signed.
If all of the types in the list for the integer-literalare unsigned, the extended integer type shall be unsigned.
If the list contains both signed and unsigned types, the extended integer type may be signed or unsigned.
A program is ill-formed if one of its translation units contains an integer-literalthat cannot be represented by any of the allowed types.