【问题标题】:Why is false && false || true evaluated to true?为什么是假&&假||真评估为真?
【发布时间】:2018-07-01 11:50:50
【问题描述】:

我知道在短路评估中,如果初始值是false,然后是&&,那么表达式会短路并且表达式被评估为false

当然,声明false && false || true 应该计算为false,但它总是计算为true。我原以为false && 就足以知道表达式是false

我理解为什么逻辑计算结果为true。我不明白的是这仍然如何满足短路评估。

【问题讨论】:

  • 检查存在并插入括号
  • "presence" == 优先级,"括号" == 括号。好吧,这就是我们不使用自然语言对机器进行编程的原因之一 :) 记住优先级的一种方法是 & 等价于乘法和 |用两根手指数数时加法。

标签: boolean-expression short-circuiting


【解决方案1】:

因为|| 的优先级低于&&。它评估为(false && false) || true;见http://en.cppreference.com/w/cpp/language/operator_precedence

【讨论】:

    【解决方案2】:

    有关操作顺序的文章请参阅“编程语言”部分:https://en.wikipedia.org/wiki/Order_of_operation

    基本上,&& 运算符首先执行,然后再计算 ||。在您的情况下,您在 x && y 中输入什么布尔值并不重要,因为 || true 将始终使其成为真。

    【讨论】:

    • 您能解释一下为什么这与短路评估不冲突吗?
    【解决方案3】:

    假 && 假 ||真 = (假 && 假) ||真的,因此,它是(任何或真的),这当然是真的。

    【讨论】:

      【解决方案4】:

      短路评估不会改变运算符的优先级。正如其他答案指出的那样,表达式本质上是(false && false) || true。由于首先计算 && 运算符,它将跳过计算第二个 false 值(可能是 (false && _) || true)。

      然后,我们有一个 false || true 表达式,其计算结果为 true

      如果表达式是false && (_),那么你的想法是正确的。

      【讨论】:

        猜你喜欢
        • 2016-08-25
        • 1970-01-01
        • 2019-01-30
        • 2011-10-11
        • 1970-01-01
        • 1970-01-01
        • 2014-09-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多