10 out of 15 rated this helpful - Rate this topic

2.4.4.2 Integer literals

Visual Studio .NET 2003

Integer literals are used to write values of types `int`, `uint`, `long`, and `ulong`. Integer literals have two possible forms: decimal and hexadecimal.

integer-literal:
decimal-integer-literal
decimal-integer-literal:
decimal-digits   integer-type-suffixopt
decimal-digits:
decimal-digit
decimal-digits   decimal-digit
decimal-digit: one of
0 1 2 3 4 5 6 7 8 9
integer-type-suffix: one of
U u L l UL Ul uL ul LU Lu lU lu
0x   hex-digits   integer-type-suffixopt
0X   hex-digits   integer-type-suffixopt
hex-digits:
hex-digit
hex-digits   hex-digit
hex-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

The type of an integer literal is determined as follows:

• If the literal has no suffix, it has the first of these types in which its value can be represented: `int`, `uint`, `long`, `ulong`.
• If the literal is suffixed by `U` or `u`, it has the first of these types in which its value can be represented: `uint`, `ulong`.
• If the literal is suffixed by `L` or `l`, it has the first of these types in which its value can be represented: `long`, `ulong`.
• If the literal is suffixed by `UL`, `Ul`, `uL`, `ul`, `LU`, `Lu`, `lU`, or `lu`, it is of type `ulong`.

If the value represented by an integer literal is outside the range of the `ulong` type, a compile-time error occurs.

As a matter of style, it is suggested that "`L`" be used instead of "`l`" when writing literals of type `long`, since it is easy to confuse the letter "`l`" with the digit "`1`".

To permit the smallest possible `int` and `long` values to be written as decimal integer literals, the following two rules exist:

• When a decimal-integer-literal with the value 2147483648 (231) and no integer-type-suffix appears as the token immediately following a unary minus operator token (Section 7.6.2), the result is a constant of type `int` with the value −2147483648 (−231). In all other situations, such a decimal-integer-literal is of type `uint`.
• When a decimal-integer-literal with the value 9223372036854775808 (263) and no integer-type-suffix or the integer-type-suffix `L` or `l` appears as the token immediately following a unary minus operator token (Section 7.6.2), the result is a constant of type `long` with the value −9223372036854775808 (−263). In all other situations, such a decimal-integer-literal is of type `ulong`.