我想计算一个 8 位 int 的 4 个中心位中有多少个是“on”的。 因此,根据我的理解,以下代码应该将位掩码 00111100 应用于 int 值,然后计算结果数字中有多少位。
int intValue &= 195;
while (intValue > 0)
{
intValue &= intValue - 1;
counter++;
}
(00111100 是十进制的 195)
但是,这似乎不起作用。
有人可以解释一下我的理解有什么问题吗?
195 不是
00111100
,而是 11000011
。你需要 60,但用二进制写可能更清楚 0b111100
。
其次,执行 PopCount 的标准方法是使用
intValue >>= 1;
。
intValue &= 0b111100;
while (intValue > 0)
{
intValue >>= 1;
counter++;
}
在.NET 7中,您还可以使用官方的
PopCount
功能。
var counter = int.PopCount(intValue & 0b111100);