C#如何评估没有括号的AND OR表达式

5

我不确定这是否有意义。我正在尝试理解C#如何处理以下逻辑:

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

基本上,我正在尝试找出当没有括号时,C#如何评估这些表达式。
8个回答

13

&&优先级 高于 ||,所以它会先被计算。实际上,它们等效于:

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

5
编译器可以通过标准规定的运算符优先级来解决这个问题。但是,如果一个表达式需要你花费超过一秒钟的时间来思考它的执行顺序...请使用括号使其更加清晰 =)

正如我[措辞不当的]回答所试图表达的那样...我认为指出c#使用短路' && '运算符很重要。一旦遇到初始false,评估就停止了。虽然你的回答在覆盖运算符优先级方面是一个好的解决方案,但我认为不要忘记这些细节是很重要的。 - Leigh S

3

C#运算符展示了运算符的优先级:

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

&&(逻辑与)的优先级高于||(逻辑或)

注意:最好的做法是始终使用括号来组合逻辑表达式,以确保意图明确...


不幸的是,这是一个糟糕的例子,因为无论您选择哪种优先级,它们都会得出相同的结果 :) - Nick Meyer
这是一个相当糟糕的例子,因为 ((false && true) || false) == (false && (true || false))(false || (true && false)) == ((false || true) && false) - cHao
1
@cHao:你似乎把发生的事情和总是正确的东西混淆了。 - Mitch Wheat
我只是为了好玩尝试创建自己的逻辑来评估字符串表达式 :) ,如果有括号会更容易。 - Eatdoku
也许这是因为示例没有说明有一个重要的区别。这就是重点。 - cHao

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以内。

通常情况下,如果不确定,使用括号。


0

运算符将按照运算符优先级的顺序进行评估。

因此,基本上是在OR之前进行AND。您的示例与以下示例相同:

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

0

最重要的是...C#使用短路运算符。因此,整个事情都是假的链接文本


-1

运算符优先级 短路求值 括号 从左到右。


-1

已经有多个其他答案包含了这些信息,并且已经存在多年。这个回答没有添加任何价值。 - Servy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接