【问题标题】:Bitwise operation on decimal datatype in .NET.NET 中十进制数据类型的按位运算
【发布时间】:2012-12-07 05:35:31
【问题描述】:

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

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

【问题讨论】:

  • 你为什么要这样做?对两个 ulong 进行按位运算是有道理的,但对小数来说,就没那么多了。

标签: .net bit-manipulation decimal 128-bit


【解决方案1】:

不,你不能。首先,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,其中包括

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

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

更多信息请阅读

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-22
    • 1970-01-01
    • 2015-03-30
    • 2011-05-06
    • 1970-01-01
    • 2020-07-11
    • 1970-01-01
    相关资源
    最近更新 更多