.NET中十进制数据类型的按位运算

问题描述 投票:0回答:1

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

是否有可能对decimal执行按位运算,并且这比在2 ulong上执行操作更快/更慢?

.net bit-manipulation decimal 128bit
1个回答
0
投票

不,你不能。首先,decimal is a floating-point type with base 10,而不是128位整数。您不能对浮点类型执行按位运算

其次,没有128位架构,所以即使你设法在C#中使用128位整数类型,它也不会比在2个ulong变量上运行更快,因为你仍然需要将128位值分解为适合寄存器的小块


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

不过在C#中有BitArray class可能会在引擎盖下使用SIMD,所以尝试创建一个128位BitArray并查看

在Mono,长期以来一直是SIMD supportMono.Simd namespace。后来当微软开发RyuJit时,他们为此目的引入了Microsoft.Bcl.Simd。它现在已经改名为System.Numerics,其中包括

启用S​​IMD的矢量类型,包括Vector2Vector3Vector4Matrix3x2Matrix4x4PlaneQuaternion

单声道现在也supports the official System.Numerics namespace。不幸的是,目前该命名空间中的许多类型都不支持按位运算,因此您可能需要使用常规算术运算来解决这个问题。但Vector<T> struct确实有BitwiseAndBitwiseOrExclusiveOr ......

有关更多信息,请阅读

© www.soinside.com 2019 - 2024. All rights reserved.