【发布时间】:2013-02-13 15:05:01
【问题描述】:
我不明白这段代码发生了什么:
if ((_value & item.Value) == item.Value)
{
item.IsSet = true;
}
在我正在查看的这个特定示例中,我看到以下内容:
如果_value 是 4103 但item.Value 是 0,则为真。
如果 _value 是 4103 但 item.Value 是 1,则为真。
如果 _value 是 4103 但 item.Value 是 2,则为真。
如果_value 是 4103 而item.Value 是 4,则为真。
如果_value 是 4103 但item.Value 是 8,则不正确。
如果 _value 是 4103 但 item.Value 是 16,则不是真的。
如果 _value 是 4103 但 item.Value 是 256,则不是真的。
如果 _value 是 4103 但 item.Value 是 512,则不是真的。
如果 _value 是 4103 但 item.Value 是 1024,则不是真的。
如果_value 是 4103 而item.Value 是 2048,那就不是真的。
如果 _value 是 4103 但 item.Value 是 4096,则为真。
在另一个示例中,我看到以下内容:
如果_value 是 51 而item.Value 是 0,那就是真的。
如果_value 是 51 而item.Value 是 1,那就是真的。
如果_value 是 51 而item.Value 是 2,那就是真的。
如果 _value 是 51,但 item.Value 是 4,则不正确。
如果_value 是 51 而item.Value 是 8,那就不是真的。
如果_value 是 51 而item.Value 是 16,那就是真的。
如果_value 是 51 而item.Value 是 32,那就是真的。
谁能给我解释一下?
【问题讨论】:
-
提示:用 binary 而不是 decimal 写的所有数字重写您的问题。模式会变得非常清晰。 (从 51 示例开始;它会更快。)
-
为什么,@EricLippert,我似乎总是发布答案,然后看到你添加的一些评论,然后想“开枪,我应该说那个” ? :)
标签: c# operators bitwise-operators