.NET 相当于 Java 的 Integer.bitCount?

2022-09-03 07:33:22

有没有类似于Java的方法或.NET Framework中的任何地方?Integer.bitCount(int)Long.bitCount(long)

(对于那些不熟悉这些Java方法的人)这也被称为:

  • 汉明重量
  • 人口计数(通常在硬件中实现时调用)。POPCNT

虽然 Web 上 可以找到很多 实现,但我想知道是否有标准库实现。

我知道这不是在 ,或 ,但也许有一个版本隐藏在某个地方,例如在加密函数中。BitArrayUInt32BitConverter


答案 1

BitVector32BitArray类都没有这样的方法,所以我相信这种方法确实在框架中缺失。

就个人而言,我认为这些类无论如何都不是很有用,因为它们错过了许多自然的位操作。我不确定它们的真正用途是什么。事实上,它们的用处非常有限。


答案 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;
}

推荐