.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 的方法。

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

DoubleSingleHalf类型旨在用于本质上不精确的值(例如,两颗星之间的距离),以及不需要高精度和小舍入误差的应用程序。 对于 System.Decimal 需要更高的精度且应最小化舍入错误的情况,请使用该类型。

注释

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

复杂

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

启用了 SIMD 的类型

命名空间 System.Numerics 包含一组已启用 .NET SIMD 的类型。 SIMD(单指令多数据)操作可以在硬件级别实现并行化。 这会增加矢量化计算的吞吐量,这些计算在数学、科学和图形应用中很常见。

已启用 .NET SIMD 的类型包括:

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

  • 两种矩阵类型, Matrix3x2表示 3x2 矩阵,表示 Matrix4x44x4 矩阵。

  • 类型 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 指令,必须使用 RyuJIT 编译器(包含在 .NET Core 和 .NET Framework 4.6 及更高版本中)的运行时运行 64 位应用。 它针对 64 位处理器增加了 SIMD 支持。

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

另请参阅