ECMA-334 C# Language Specification

9.4.4.2: Integer literals

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
hexadecimal-integer-literal
decimal-integer-literal
decimal-digits integer-type-suffixopt
decimal-digit
decimal-digit
decimal-digits decimal-digit
decimal-digit
0 1 2 3 4 5 6 7 8 9
integer-type-suffix
U u L l UL Ul uL ul LU Lu lU lu
hexadecimal-integer-literal
0x hex-digits integer-type-suffixopt
0X hex-digits integer-type-suffixopt
hex-digit
hex-digit
hex-digits hex-digit
hex-digit
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 value represented by an integer literal is outside the range of the ulong type, a compile-time error occurs.

[Note: 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". end note]

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