.NET 中的数字

.NET 提供了一系列数值整数和浮点基元,还提供:

整数类型

.NET 支持带符号和无符号的 8 位、16 位、32 位和 64 位和 128 位整数类型,如下表所示。

带符号整数类型

类型 大小(以字节为单位) 最小值 最大值
System.Int16 2 -32,768 32,767
System.Int32 4 -2,147,483,648 2,147,483,647
System.Int64 8 -9,223,372,036,854,775,808 9,223,372,036,854,775,807
System.Int128 16 −170,141,183,460,469,231,731,687,303,715,884,105,728 170,141,183,460,469,231,731,687,303,715,884,105,727
System.SByte 1 -128 127
System.IntPtr(32 位进程中) 4 -2,147,483,648 2,147,483,647
System.IntPtr(64 位进程中) 8 -9,223,372,036,854,775,808 9,223,372,036,854,775,807

无符号整数类型

类型 大小(以字节为单位) 最小值 最大值
System.Byte 1 0 255
System.UInt16 2 0 65,535
System.UInt32 4 0 4,294,967,295
System.UInt64 8 0 18,446,744,073,709,551,615
System.UInt128 16 0 340,282,366,920,938,463,463,374,607,431,768,211,455
System.UIntPtr(32 位进程中) 4 0 4,294,967,295
System.UIntPtr(64 位进程中) 8 0 18,446,744,073,709,551,615

每个整数类型都支持一组标准算术运算符。 System.Math 类为更广泛的数学函数集提供方法。

还可以使用 System.BitConverter 类对整数值中的单个位进行运算。

注意

无符号整数类型不符合 CLS。 有关详细信息,请参阅语言独立性和与语言无关的组件

BigInteger

System.Numerics.BigInteger 结构是不可变类型,表示其值没有理论上限或下限的任意大型整数。 BigInteger 类型的方法几乎与其他整数类型的方法一致。

浮点类型

.NET 包含以下浮点类型:

类型 大小(以字节为单位) 大致范围 基元? 说明
System.Half 2 ±65504 已在 .NET 5 中引入
System.Single 4 ±3.4 x 1038
System.Double 8 ±1.7 × 10308
System.Decimal 16 ±7.9228 x 1028

HalfSingleDouble 类型都支持表示非数字和无穷大的特殊值。 例如,Double 类型提供以下值:Double.NaNDouble.NegativeInfinityDouble.PositiveInfinity。 可以使用 Double.IsNaNDouble.IsInfinityDouble.IsPositiveInfinityDouble.IsNegativeInfinity 方法来测试这些特殊值。

每个浮点类型都支持一组标准的算术运算符。 System.Math 类为更广泛的数学函数集提供方法。 .NET Core 2.0 及更高版本包含 System.MathF 类,该类提供接受 Single 类型的参数的方法。

还可以使用 System.BitConverter 类对 DoubleSingleHalf 值中的单个位进行运算。 System.Decimal 结构具有自己处理十进制值单个位的方法(Decimal.GetBitsDecimal(Int32[]))以及一套执行其他数学运算的方法。

DoubleSingleHalf 类型旨在用于本质上不精确的值(例如两颗行星之间的距离)和无需高度精确和舍入误差小的应用程序。 在需要较高准确度和尽量减小舍入误差的情况下,使用 System.Decimal 类型。

注意

Decimal 类型不会消除对舍入的要求。 相反,它最大限度地减少了因舍入而导致的错误。

Complex

System.Numerics.Complex 结构表示复数,即带实数部分和虚数部分的数字。 此类型支持一套标准的算术、比较、相等、显式和隐式转换运算符,以及数学、代数和三角方法。

启用了 SIMD 的类型

System.Numerics 命名空间包含一组启用了 .NET SIMD 的类型。 SIMD (Single Instruction Multiple Data) 操作可以在硬件级别并行化。 这可以增加向量化计算的吞吐量,这在数学、科学和图形应用中很常见。

启用了 .NET SIMD 的类型如下:

  • Vector2Vector3Vector4 类型,用于表示具有 2、3 和 4 Single 值的向量。

  • 两个矩阵类型:Matrix3x2(表示 3x2 矩阵)和 Matrix4x4(表示 4x4 矩阵)。

  • Plane 类型,表示三维空间中的一个平面。

  • Quaternion 类型,表示一个用于对三维物理旋转进行编码的向量。

  • Vector<T> 类型,表示指定数字类型的向量,并提供受益于 SIMD 支持的一组广泛的运算符。 Vector<T> 实例的计数是固定的,但其值 Vector<T>.Count 取决于执行代码的计算机的 CPU。

    注意

    Vector<T> 类型随 .NET Core 和 .NET 5+ 一起提供,但 .NET Framework 中不提供。 如果你使用的是 .NET Framework,请安装 System.Numerics.Vectors NuGet 包来访问此类型。

启用了 SIMD 的类型以这样一种方式实现:即它们可以与未启用 SIMD 的硬件或 JIT 编译器一起使用。 要利用 SIMD 指令,你的 64 位应用必须由使用 RyuJIT 编译器的运行时运行,该编译器包含在 .NET Core 和 .NET Framework 4.6 及更高版本中。 它针对 64 位处理器增加了 SIMD 支持。

有关详细信息,请参阅使用 SIMD 加速数值类型

另请参阅