C#如何在没有括号的情况下计算AND OR表达式

时间:2010-12-15 23:19:03

标签: c# .net

不确定这是否有意义 我试图了解C#如何处理以下逻辑

false && true || false
false || true && false

基本上我试图找出C#在没有括号时如何评估这些表达式。

8 个答案:

答案 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开始考虑0true 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)