C#逻辑运算问题

时间:2011-02-11 11:35:19

标签: c# evaluation operator-keyword

为什么会这样:

(true | false & false)

这是假的:

(true | false && false)
在我看来,应该是对方..

3 个答案:

答案 0 :(得分:15)

他们绑定为:

true | (false & false)  // true

(true | false) && false  // false

我会避免编写依赖这些规则的代码 - 读者显然不清楚这一点:)

供参考,请参阅C#4语言规范的第7.3.1节,其中&的优先级高于|(因此第一个结果),|优先级高于&& {{1}}(因此第二个结果)。

答案 1 :(得分:3)

这是因为运算符优先级here

答案 2 :(得分:3)

&优先|优先&&,因此您的表达式评估为

(true | (false & false)) = (true | false) = true

((true | false) && false) = (true && false) = false

有关详细信息,请参阅包含优先顺序的the reference of C# operators