整型数值类型 表示整数。 所有的整型数值类型均为值类型。 它们还是简单类型,可以使用文本进行初始化。 所有整型数值类型都支持算术、位逻辑、比较和相等运算符。
整型类型的特征
表的最后两行中的 nint 和 nuint 类型是本机大小的整数。 在内部它们由所指示的 .NET 类型表示,但在任意情况下关键字和 .NET 类型都是不可互换的。 编译器为 nint 和 nuint 的整数类型提供操作和转换,而不为指针类型 System.IntPtr 和 System.UIntPtr 提供。 有关详细信息,请参阅 和 nuint 类型。
每个整型类型的默认值都为零 0。 除本机大小的类型外,每个整型类型都有 MinValue 和 MaxValue 常量,提供该类型的最小值和最大值。
System.Numerics.BigInteger 结构用于表示没有上限或下限的带符号整数。
整数文本
整数文本可以是
十进制:不使用任何前缀
十六进制:使用 或 0X 前缀
二进制:使用 或 0B 前缀(在 C# 7.0 和更高版本中可用)
整数文本的类型由其后缀确定,如下所示:
如果文本没有后缀,则其类型为以下类型中可表示其值的第一个类型:int、uint、long、ulong。
如果文本以 U 或 u 为后缀,则其类型为以下类型中可表示其值的第一个类型:uint、ulong。
如果文本以 L 或 l 为后缀,则其类型为以下类型中可表示其值的第一个类型:long、ulong。
注意:可以使用小写字母 l 作为后缀。 但是,这会生成一个编译器警告,因为字母 l 可能与数字 1 混淆。 为清楚起见,请使用 L。
可以使用小写字母 l 作为后缀。 但是,这会生成一个编译器警告,因为字母 l 可能与数字 1 混淆。 为清楚起见,请使用 L。
如果由整数字面量所表示的值超出了 UInt64.MaxValue,则将出现编译器错误 UInt64.MaxValue。
如果确定的整数文本的类型为 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'`
如前面的示例所示,如果文本的值不在目标类型的范围内(大于256),则发生编译器错误 CS0031。
还可以使用强制转换将整数文本所表示的值转换为除确定的文本类型之外的类型:
var signedByte = (sbyte)42;
var longVariable = (long)42;
转换
可以将任何整型数值类型转换为其他整数数值类型。 如果目标类型可以存储源类型的所有值,则转换是隐式的。 否则,需要使用强制转换表达式来执行显式转换。