fin*_*nnw 15 .net java bit-manipulation hammingweight
是否有类似于Java的方法Integer.bitCount(int)或Long.bitCount(long).NET Framework中的任何位置?
(对于那些不熟悉这些Java方法的人),这也称为:
POPCNT在硬件中实现时调用.)虽然有 有 很多 的 实现 ,以 被发现在网络上,我在想,如果有一个标准库的实现.
我知道这不在BitArray,UInt32或者BitConverter,但也许有一个版本隐藏在某处,例如在加密功能中.
此功能不在 .NET Framework 或 .NET Standard 中,但在 .NET Core 3.0 及更高版本中,因此在System.Numerics.BitOperations静态类下包括 .NET 5.0 及更高版本,特别是方法
两者都在 C# 中System.Int32返回int。
还有其他有用的操作:计算前导零或尾随零、计算整数以 2 为底的对数以及执行位旋转(也称为循环移位)。
在核心库中这样做的最大好处/原因可能是您可以获得硬件加速而无需链接到非托管代码,并且类文档证实了这一点:
为固有的位调整操作提供实用方法。这些方法使用底层平台上可用的硬件内在函数;否则,他们会使用优化的软件后备。
我知道这是一个非常古老的问题,但对于像我这样的人来说,至少有一个解决方法可能会有所帮助:
public static int BitCount(int n)
{
var count = 0;
while (n != 0)
{
count++;
n &= (n - 1); //walking through all the bits which are set to one
}
return count;
}
Run Code Online (Sandbox Code Playgroud)
类BitVector32和类都BitArray没有这样的方法,所以我相信框架中确实缺少这个方法。
就我个人而言,我认为这些类 \xe2\x80\x99t 无论如何都不太有用,因为它们错过了许多自然的位操作。我\xe2\x80\x99m 不确定它们的真正用途。事实上,它们的用处非常有限。
\n| 归档时间: |
|
| 查看次数: |
1780 次 |
| 最近记录: |