【发布时间】:2025-12-01 14:55:01
【问题描述】:
因此,以下代码遍历一个字节 (0-255) 中的所有值,并打印适合指定位掩码的值。通常这不会是一个问题(因为常规的“值和掩码”只检查设置位),但由于我想忽略一些位并确保一些位为零,因此检查它的代码最终看起来像是有点长,效率不高。
我将解释代码的更多细节。 我用来测试代码的位掩码如下:0-1--10-
破折号表示被忽略的位。为了找到应该忽略哪些位,我将代码中的掩码分成两个单独的掩码。第一个是“掩码”变量,它保存应该设置的位。第二个掩码“忽略”清除了应忽略的位。这样,代码可以区分清除位和“掩码”中要忽略的位。我使用的值是掩码的 00100100 (36) 和忽略的 10100110 (166)。
代码确实正确返回了预期值:
0x24 0x25 0x2C 0x2D 0x34 0x35 0x3C 0x3D 0x64 0x65 0x6C 0x6D 0x74 0x75 0x7C 0x7D
有没有什么方法可以让这段代码更高效,甚至可能只有一个掩码来测试值?
private void button1_Click(object sender, EventArgs e)
{
byte mask = (byte)(Int32.Parse(textBoxMask.Text));
byte ignore = (byte)(Int32.Parse(textBoxIgnore.Text));
ushort i = 0;
byte val;
while(i <= 0xFF)
{
val = (byte)i;
if (((val & ignore & mask) == mask) && ((~(val) & ~(mask) & ignore) == (~(mask) & ignore)))
{
Console.WriteLine(string.Format("{0:X}", val));
}
i++;
}
}
【问题讨论】: