Tag: hammingweight

优雅地确定是否多个布尔值是“真”

我有一组五个布尔值。 如果不止一个是真的,我想要执行一个特定的function。 什么是你可以想到的最优雅的方式将允许我检查这个条件在一个单一的if()语句? 目标语言是C#,但我也对其他语言的解决scheme感兴趣(只要我们没有谈论具体的内置函数)。 一个有趣的select是将布尔值存储在一个字节中,进行右移,并与原始字节进行比较。 就像if(myByte && (myByte >> 1))但是这需要转换单独的布尔值为一个字节(通过bitArray?),似乎有点(双关语意)笨拙… 对不起,应该已经 if(myByte & (myByte – 1)) [/编辑] 注:这当然非常接近于经典的“人口计数”,“横向加法”或“汉明重量”编程问题 – 但不完全相同。 我不需要知道有多less位被设置,只有当它不止一个。 我的希望是有一个更简单的方法来实现这一点。

如何计算一个32位整数的设置位数?

表示数字7的8位看起来像这样: 00000111 三位被设置。 什么algorithm来确定一个32位整数的设置位数?