The best source is the C# specification, specifically section Literals.
The relevant bits:
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 no real_type_suffix is specified, the type of the real literal is double
. Otherwise, the real type suffix determines the type of the real literal, as follows:
A real literal suffixed by F or f is of type float
. […]
A real literal suffixed by D or d is of type double
. […]
A real literal suffixed by M or m is of type decimal
. […]
That means the letter (or letters) is called “suffix”. There is no way to represent short
this way, so you have to use (short)0
, or just short x = 0;
.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…