我不确定这是否有意义。我正在尝试理解C#如何处理以下逻辑:
false && true || false
false || true && false
基本上,我正在尝试找出当没有括号时,C#如何评估这些表达式。
&&
的 优先级 高于 ||
,所以它会先被计算。实际上,它们等效于:
false && true || false => (false && true) || false => false
false || true && false => false || (true && false) => false
true && false || false => (true && false) || false => false
true || false && false => true || (false && false) => true
C#运算符展示了运算符的优先级:
false && true || false = (false && true) || false = false
false || true && false = false || (true && false) = false
&&
(逻辑与)的优先级高于||
(逻辑或)
注意:最好的做法是始终使用括号来组合逻辑表达式,以确保意图明确...
((false && true) || false) == (false && (true || false))
和 (false || (true && false)) == ((false || true) && false)
。 - cHao大家都谈到了运算符优先级和参考表,你可以在其中查找。但我想给出一个提示如何记忆。如果你将false
看作0
,将true
看作1
,那么&&
就像乘法,||
就像加法(它们实际上被称为逻辑乘法和逻辑加法)。优先级关系是相同的:乘法高于加法。它的工作方式也是一样的:
0 * 0 == 0 | false && false == false
0 * 1 == 0 | false && true == false
1 * 0 == 0 | true && false == false
1 * 1 == 1 | true && true == true
0 + 0 == 0 | false || false == false
0 + 1 == 1 | false || true == true
1 + 0 == 1 | true || false == true
1 + 1 == 1* | true || true == true
(*) 实际上是2,但被限制在1以内。
通常情况下,如果不确定,使用括号。
运算符将按照运算符优先级的顺序进行评估。
因此,基本上是在OR
之前进行AND
。您的示例与以下示例相同:
(false && true) || false
false || (true && false)
运算符优先级 短路求值 括号 从左到右。
与运算符比或运算符的优先级更高(请查看http://msdn.microsoft.com/en-us/library/6a71f45d.aspx)。意思是,&&始终首先被评估。
因此,x && y || z
被理解为(x && y) || z
。
而a || b && c
被理解为a || (b && c)。