C# 数值类型
整数文本
整数文本可以是
- 十进制:不使用任何前缀
- 十六进制:使用
0x
或0X
前缀 - 二进制:使用
0b
或0B
前缀(在 C# 7.0 和更高版本中可用)
下面的代码演示每种类型的示例:
var decimalLiteral = 42;
var hexLiteral = 0x2A;
var binaryLiteral = 0b_0010_1010;int a = 0b_1101;//输出13
前面的示例还演示了如何将 _
用作数字分隔符(从 C# 7.0 开始提供支持)。 可以将数字分隔符用于所有类型的数字文本。
整数文本的类型由其后缀确定,如下所示:
-
如果文本没有后缀,则其类型为以下类型中可表示其值的第一个类型:
int
、uint
、long
、ulong
。备注
文本解释为正值。 例如,文本
0xFF_FF_FF_FF
表示uint
类型的数字4294967295
,但其位表现形式与int
类型的数字-1
相同。 如果需要特定类型的值,请将文本强制转换为该类型。 如果文本值无法以目标类型表示,请使用运算符unchecked
。 示例:unchecked((int)0xFF_FF_FF_FF)
生成-1
。 -
如果文本以
U
或u
为后缀,则其类型为以下类型中可表示其值的第一个类型:uint
、ulong
。 -
如果文本以
L
或l
为后缀,则其类型为以下类型中可表示其值的第一个类型:long
、ulong
。备注
可以使用小写字母
l
作为后缀。 但是,这会生成一个编译器警告,因为字母l
可能与数字1
混淆。 为清楚起见,请使用L
。 -
如果文本的后缀为
UL
、Ul
、uL
、ul
、LU
、Lu
、lU
或lu
,则其类型为ulong
。
如果由整数字面量所表示的值超出了 UInt64.MaxValue,则将出现编译器错误 CS1021。
如果确定的整数文本的类型为 int
,且文本所表示的值位于目标类型的范围内,则该值可以隐式转换为 sbyte
、byte
、short
、ushort
、uint
、ulong
、nint
或 nuint
:
byte a = 17;
byte b = 300; // CS0031: Constant value '300' cannot be converted to a 'byte'
如前面的示例所示,如果文本的值不在目标类型的范围内,则会发生编译器错误 CS0031 。
还可以使用强制转换将整数文本所表示的值转换为除确定的文本类型之外的类型:
var signedByte = (sbyte)42;
var longVariable = (long)42;
int a = 1, b = 2;
long n = 123L;//避免混淆加L
double c = 3.0d;//可以加或不加d
float d = 0.3f;
float f = 134.45E-2f;
// output: 1.3445
decimal m = 1.5E6m; // output: 1500000 E基地为10 m或大M都可以