不确定这是否有意义 我试图了解C#如何处理以下逻辑
false && true || false
false || true && false
基本上我试图找出C#在没有括号时如何评估这些表达式。
答案 0 :(得分:10)
&&
的{{3}}高于||
,因此首先进行评估。实际上,它们相当于:
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
答案 1 :(得分:4)
编译器将其计算出来,因为标准指定了operator precedence。
那就是说,如果一个表达式要求你考虑一下这个序列中发生的事情超过一秒......用括号来说清楚=)
答案 2 :(得分:3)
C# Operators显示运算符优先级:
false && true || false = (false && true) || false = false
false || true && false = false || (true && false) = false
&&
(逻辑AND)的优先级高于||
(逻辑OR)
注意:总是使用括号对逻辑表达式进行分组是一种好习惯(有些人可能会说是最佳做法),因此意图是明确的......
答案 3 :(得分:2)
每个人都说过运算符优先级和参考表,你可以在其中查找。但是我想提一下如何记住它。如果从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
通常,如有疑问,请使用括号。
答案 4 :(得分:0)
将按operator precedence的顺序评估运算符。
所以,基本上,AND
之前OR
。您的示例与以下内容相同:
(false && true) || false
false || (true && false)
答案 5 :(得分:0)
最重要的是...... C#使用短路运算符。所以整件事都是假的 link text
答案 6 :(得分:-1)
运算符优先级 短路评估 插入语 从左到右。
答案 7 :(得分:-1)
AND运算符的优先级高于OR运算符(请参阅http://msdn.microsoft.com/en-us/library/6a71f45d.aspx)。含义&&总是首先评估。
因此x && y || z
被理解为(x && y) || z
。
a || b && c
被理解为a || (b && c)
。