&& 和 ||在同一表达式 [duplicate] 中

&& and || in the same expression [duplicate]

提问人:Wayne Griffin 提问时间:8/15/2021 更新时间:8/15/2021 访问量:486

问:

我是编程新手,所以如果这真的是基本的,我深表歉意。我只是无法理解如何评估这个表达式的逻辑。我知道 AND 和 OR 之间的区别。我也知道短路和优先级。这是我正在努力表达的。

bool a = false
bool b = true
bool c = true

If (a && b || c)
{
    Console.WriteLine("True");
}

此结果为 true。但我认为一旦检查了 a,它就会短路,因为 && 的优先级并不完全正确。

有人可以解释为什么这是有效的吗?

C# 布尔逻辑

评论

2赞 Flydog57 8/15/2021
在这样的表达式上添加括号总是一个好主意,即使它们是多余的。你的读者(/维护者)在两年后查看你的代码时,不需要在谷歌上搜索优先级规则。以两次击键为代价的清晰度是值得的
0赞 devNull 8/15/2021
关于短路:评估为假后将短路,因此不进行评估。但既然有事后,仍然被评估,最终返回真实。查看 dotnetfiddle.net/92Kfoz&&ab||c
0赞 Wayne Griffin 8/15/2021
这是一个很好的例子 devNull!谢谢。通过您的演示可以清楚地了解编译器在做什么。我之前试图在 VS 中复制这一点,但无法理解它。你能把这个作为答案,这样我就可以结束这个问题了吗?
0赞 8/15/2021
根据预期结果,您需要编写,甚至为了避免混淆:或 .布尔代数傻瓜书 • 什么是布尔逻辑? • 布尔逻辑 • 布尔逻辑 • 布尔代 ( a && ( b || c ) )( (a && b ) || c )

答:

4赞 Mitch 8/15/2021 #1

&&绑定比 更紧密。所以等价于 。||a && b || c(a && b) || c

有关 C# 中所有运算符的优先级,请参阅 https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/operators/boolean-logical-operators

-1赞 Soios 8/15/2021 #2

它是这样评估的:

首先:a 和 b 导致 true 或 false = (a & b)

第二:true OR false (从第一步开始) OR true = (a & b) ||c

因为你在 OR 的右侧有一个 true,它是真的

评论

0赞 Wayne Griffin 8/15/2021
当被宣布为假时,如何显示为真,对不起?编译器实际上是这样看的,还是错别字?a
0赞 Soios 8/15/2021
应该明确结果可能是真的,也可能是假的。不好意思