我刚刚了解到decimal
数据类型在.NET中用128位表示
是否可以对decimal
执行按位操作,并且比在ulong
上执行操作更快/更慢?
答案 0 :(得分:0)
decimal
is a floating-point type with base 10,不是 128位整数。您不能对浮点类型执行按位操作
其次,没有128位架构,所以即使你设法在C#中使用128位整数类型,它也不会比在2 ulong
变量上运行更快,因为你仍然需要将128位值分解为适合寄存器的小块
也就是说,大多数现代PC架构都支持SIMD,因此可以在128位类型上进行快速按位操作。在本机代码中这很容易,但我不确定你是否可以在C#中做到这一点。如果没有,那么你必须编写一个本机代码库并从C#中调用它。
然而在C#中,可能使用SIMD的BitArray class,所以尝试创建一个128位BitArray并查看
Mono长期以SIMD support为Mono.Simd
namespace。后来当微软开发RyuJit时,他们为此目的引入了Microsoft.Bcl.Simd
。它现在已重命名为System.Numerics
,其中包括
支持SIMD的矢量类型,包括Vector2,Vector3,Vector4,Matrix3x2,Matrix4x4,Plane和{ {3}}
Mono现在也Quaternion。不幸的是,目前该命名空间中的许多类型都不支持按位运算,因此您可能需要使用常规算术运算来解决这个问题。但是supports the official System.Numerics
namespace确实有BitwiseAnd
,BitwiseOr
,ExclusiveOr
......
欲了解更多信息,请阅读