多个 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.
如果您想强制执行特定顺序,您始终可以使用括号。
你只需要学习一些基本规则:
- (a OR b) 为真当且仅当 a 或 b 中至少有一个为真。
- (a AND b) 为真当且仅当 a 和 b 都为真。
- 运算符的顺序很重要:您不能随心所欲地执行逻辑。计算机按顺序计算逻辑语句的输出。简化的顺序是这样的:第一个是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);
这道题很简单,但是我做不出来。我的条件很简单:
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.
如果您想强制执行特定顺序,您始终可以使用括号。
你只需要学习一些基本规则:
- (a OR b) 为真当且仅当 a 或 b 中至少有一个为真。
- (a AND b) 为真当且仅当 a 和 b 都为真。
- 运算符的顺序很重要:您不能随心所欲地执行逻辑。计算机按顺序计算逻辑语句的输出。简化的顺序是这样的:第一个是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);