(true & false || true) 在 C# 中是什么意思?

What is the meaning of (true && false || true) in C#?

提问人:Entity 提问时间:4/20/2011 最后编辑:razlebeEntity 更新时间:4/28/2011 访问量:6177

问:

如果我有这个等式:

    var x = (true && false || true)

这是否等同于:

    var x = ((true && false) || true)

艺术

    var x = (true && (false || true))

这背后的逻辑是什么?

C# 布尔逻辑

评论

2赞 Michael Greene 4/20/2011
msdn.microsoft.com/en-us/library/aa691323(v=vs.71).aspx
0赞 jimplode 4/20/2011
msdn.microsoft.com/en-us/library/aa691323%28v=vs.71%29.aspx 请参阅此链接以提供 Microsoft 定义。

答:

0赞 Marcelo Cantos 4/20/2011 #1

&&具有更高的优先级,因此第二种形式(三者中)是正确的。至于逻辑,往往与乘法和加法模糊地联系在一起(如果你分别使用零和非零来表示假和真,运算符就有等效的语义)。但大多数情况下,它只是自 C 以来的方式,可能在 C 之前。&&||

9赞 Aliostad 4/20/2011 #2

AND 胜过 OR。

所以它会

var x = ((true && false) || true)

请参阅运算符优先级和关联性

评论

1赞 Aliostad 4/20/2011
好吧,我认为这样说更好:)
3赞 razlebe 4/20/2011 #3

我相信是

var x = ((true && false) || true)

...根据 MSDN 的优先级&&

你可能会认为,无论谁写了那行特定的代码,都可能通过在正确的位置插入括号来明确他们的意图。帮其他人一个忙,把他们加进去。

0赞 Sergey K 4/20/2011 #4

如果在此表达式中使用 ||没错,平均值与其他结果无关紧要,它总是真的

评论

0赞 Entity 4/20/2011
在实际代码中,我使用的是变量。我替换了静态值来简化问题。
2赞 Mark Simpson 4/20/2011 #5

它相当于

var x = ((true && false) || true)

&& 运算符的优先级高于 ||算子。

运算符优先级 MSDN 文档

评论

4赞 Eric Lippert 4/20/2011
您的语句包含一个微妙的逻辑错误。优先级不控制计算子表达式的顺序。也就是说,当你说 A() + B() * C() 时,并不是因为 * 的优先级高于 +,所以 B() * C() 的计算结果在 A() 之前计算。相反,计算的顺序是 A(),然后是 B(),然后是 C(),然后是乘法,然后是加法。子表达式左到右计算,故事结束。优先级和关联性计算出子表达式是什么。
0赞 Mark Simpson 4/28/2011
@Eric:哎呀——在这种情况下,不是我想说/传达的意思;感谢您的更正。
0赞 Chandu 4/20/2011 #6

上面的表达式的计算结果是因为运算符优先级(&& 的优先级高于 ||)。((true && false) || true)

有关运算符优先级的更多信息,请查看此链接:http://msdn.microsoft.com/en-us/library/aa691323(v=vs.71).aspx

6赞 Jason Moore 4/20/2011 #7

在布尔逻辑中,“not”() 在“and”() 之前计算,“and”在“或”() 之前计算。通过使用 double () 和 double (),这些运算符将短路,这不会影响逻辑结果,但会导致右侧的项在需要时无法计算。!&&||&&||

因此

var x = (true && false || true)评估 评估 到false|| truetrue

var x = ((true && false) || true)评估 评估 到false || truetrue

var x = (true && (false || true))评估 评估 到true && truetrue

评论

3赞 rucsi 4/20/2011
我认为 (true & false || true) 计算结果为 false ||true,因为&&有优先权,所以它等价于((true & false) || true)。无论如何,最终这一切都将是真的。
0赞 Jason Moore 4/25/2011
好渔获!我在那里打字搞砸了。
0赞 normalppl 4/20/2011 #8

&& 的优先级高于 || 因此,前两个用例的行为将完全相同。 大括号在这里没有意义,就像在:

a * b + c = (a * b) + c

您可以使用大括号控制优先级和关联性。因此,第三个用例将检查 OR 条件,然后检查 AND。