多个 OR 和 AND 如何计算

how multiple OR's and AND evaluate

这道题很简单,但是我做不出来。我的条件很简单:

bool c = true || true || true && false;

为什么这个评价是true?据我所知,它的评估是这样的:

true || true || true && false => true || true && false => true && false => false

但我猜错了。

考虑或||像加法和 AND && 作为乘法。里面有个优先级,其实有时候你会看到这样写的:

bool c = true + true + true + true * false

在这种情况下,第一个评估是true * false,然后是其余的OR。在这种特殊情况下,OR 的真实评估顺序将取决于 language/compiler.

如果您想强制执行特定顺序,您始终可以使用括号。

你只需要学习一些基本规则:

  1. (a OR b) 为真当且仅当 a 或 b 中至少有一个为真。
  2. (a AND b) 为真当且仅当 a 和 b 都为真。
  3. 运算符的顺序很重要:您不能随心所欲地执行逻辑。计算机按顺序计算逻辑语句的输出。简化的顺序是这样的:第一个是Grouping(),第二个是And,第三个是OR .

所以当你说 bool c = true || true || true && false;。计算机说好的让我们先计算 true && false。这是假的!然后它计算 true || true || false 这是真的。

编辑

注 1:逻辑运算符及其优先级的完整列表在很大程度上取决于语言。你可以参考文档。 for C#

注意 2:最佳做法是像括号一样使用 GROUPING,因为 GROUPING 始终具有 优先级 。例如,最好说: bool c = (true || true) || (true && false);