给定一个 8 位 int,有没有办法使用掩码并使 4 个中心位不受影响?

问题描述 投票:0回答:1

我想计算一个 8 位 int 的 4 个中心位中有多少个是“on”的。 因此,根据我的理解,以下代码应该将位掩码 00111100 应用于 int 值,然后计算结果数字中有多少位。

int intValue &= 195;
while (intValue > 0)
{
    intValue &= intValue - 1;
    counter++;
}

(00111100 是十进制的 195)

但是,这似乎不起作用。

有人可以解释一下我的理解有什么问题吗?

c# bitmask
1个回答
0
投票
二进制中的

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);
© www.soinside.com 2019 - 2024. All rights reserved.