0

我刚刚了解到decimal数据类型在 .NET 中由 128 位表示

是否可以对 进行按位运算decimal,这会比在 2 上进行操作更快/更慢ulong吗?

4

1 回答 1

0

不,你不能。首先,decimal是以 10 为底的浮点类型而不是128 位整数。您不能对浮点类型进行按位运算

其次,没有 128 位架构,因此即使您设法在 C# 中使用 128 位整数类型,它也不会比操作 2 个ulong变量快,因为您仍然必须将 128 位值分解成更小的值适合登记册的作品


也就是说,大多数现代 PC 架构都支持SIMD,因此可以在 128 位类型上进行快速按位运算。在本机代码中这很容易,但我不确定你是否可以在 C# 中做到这一点。如果没有,那么您必须编写一个本机代码库并从 C# 调用它。

尽管如此,在 C# 中有可能在后台使用 SIMD 的BitArray 类,因此请尝试创建一个 128 位 BitArray 并查看

在 Mono 中,命名空间长期以来一直支持 SIMD。后来,当微软开发 RyuJit 时,他们为此引入了 RyuJit。它现在已重命名为其中包括Mono.SimdMicrosoft.Bcl.SimdSystem.Numerics

支持 SIMD 的向量类型,包括Vector2Vector3Vector4Matrix3x2Matrix4x4PlaneQuaternion

Mono 现在也支持官方System.Numerics命名空间。不幸的是,目前该命名空间中的许多类型都不支持按位运算,因此您可能需要使用普通的算术运算来解决这个问题。但是Vector<T>结构确实有BitwiseAnd, BitwiseOr, ExclusiveOr...

欲了解更多信息,请阅读

于 2013-08-24T14:30:09.647 回答