在Integer.bitCount(int)框架中有类似于Java的Long.bitCount(long)或.NET的方法吗?
(对于那些不熟悉这些Java方法的人),这也被称为:
POPCNT )。虽然那里 是 富足 的 实现 至 be在web上找到了,但我想知道是否有一个标准的库实现。
我知道这不是在BitArray、UInt32或BitConverter中,但也许某个地方隐藏了一个版本,例如在密码函数中。
发布于 2011-05-06 10:42:34
BitVector32和BitArray类也没有这样的方法,所以我认为框架中确实缺少这个方法。
就我个人而言,我认为这些类实际上并不有用,因为它们错过了许多自然的位操作。我不知道它们的真正目的是什么。尽管如此,它们的用处非常有限。
发布于 2020-05-24 17:23:20
此功能不在.NET框架或.NET标准中,但在.NET Core3.0和更新版本中,因此在System.Numerics.BitOperations静态类下包括.NET 5.0和更新版本,特别是方法
它们都返回System.Int32,aka,int,in C#。
还有其他有用的操作:计数前导或尾随零,计算整数基数-2对数,执行位旋转,也就是循环移位。
在核心库中这样做的最大好处/原因可能是您可以在不链接到非托管代码的情况下获得硬件加速,而且类文档确认了这一点:
为内部位旋转操作提供实用方法。当底层平台上可用时,这些方法使用硬件本质;否则,它们使用优化的软件回退。
发布于 2020-06-08 14:49:37
我知道这是一个很老的问题,但对像我这样的人来说,至少有一个解决办法是有帮助的:
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;
}https://stackoverflow.com/questions/5910154
复制相似问题