我有这段代码:
int flags = some integer value;
compte.actif = !Convert.ToBoolean(flags & 0x0002);
它工作得很好问题是我真的不明白它是如何工作的..
&
操作是按位的,我假设如此想象110110& 000010我认为它会导致001011(也许我从这里错了)。目标是检查第一项中的2位是否已填满。所以在这种情况下确实如此。
我真的不明白它如何在布尔值中转换..
感谢您的帮助
答案 0 :(得分:2)
Bitwise和110110& 000010是000010。
ToBoolean
looks for a non-zero value,基本上,此代码会检查flags
是否第二位设置,然后否定它(!
) 。所以它正在检查“第二位清楚”。
可能会有一个更传统的测试:
compte.actif = (flags & 0x02) == 0;
答案 1 :(得分:2)
按位AND运算将为您提供一个整数,其中包含在两个数字上设置的位。即0b110011& 0b010100产生0b010000。 感叹号会切换布尔值,导致只有第二位的设置才为真。