首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.NET相当于Java的Integer.bitCount?

.NET相当于Java的Integer.bitCount?
EN

Stack Overflow用户
提问于 2011-05-06 10:37:59
回答 4查看 3.5K关注 0票数 16

Integer.bitCount(int)框架中有类似于Java的Long.bitCount(long)或.NET的方法吗?

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

  • Hamming重量
  • 人口计数(通常在硬件中实现时称为POPCNT )。

虽然那里 富足 实现 be在web上找到了,但我想知道是否有一个标准的库实现。

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-05-06 10:42:34

BitVector32BitArray类也没有这样的方法,所以我认为框架中确实缺少这个方法。

就我个人而言,我认为这些类实际上并不有用,因为它们错过了许多自然的位操作。我不知道它们的真正目的是什么。尽管如此,它们的用处非常有限。

票数 4
EN

Stack Overflow用户

发布于 2020-05-24 17:23:20

此功能不在.NET框架或.NET标准中,但在.NET Core3.0和更新版本中,因此在System.Numerics.BitOperations静态类下包括.NET 5.0和更新版本,特别是方法

它们都返回System.Int32,aka,int,in C#。

还有其他有用的操作:计数前导或尾随零,计算整数基数-2对数,执行位旋转,也就是循环移位。

在核心库中这样做的最大好处/原因可能是您可以在不链接到非托管代码的情况下获得硬件加速,而且类文档确认了这一点:

为内部位旋转操作提供实用方法。当底层平台上可用时,这些方法使用硬件本质;否则,它们使用优化的软件回退。

票数 5
EN

Stack Overflow用户

发布于 2020-06-08 14:49:37

我知道这是一个很老的问题,但对像我这样的人来说,至少有一个解决办法是有帮助的:

代码语言:javascript
复制
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;
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5910154

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档