【问题标题】:Why does this expression evaluate to 0?为什么这个表达式的计算结果为 0?
【发布时间】:2015-12-15 18:46:16
【问题描述】:

为什么会这样表达:

-5 < -3 < -1

在 MATLAB 中计算为 0?每个单独的语句都评估为 true,所以我很困惑为什么它评估为 false。

非常感谢。

【问题讨论】:

  • 如果您打算将 -3 与其他值进行比较(如在不等式中),则需要将其分成两个比较。像这样(-5 &lt; -3) &amp;&amp; (-3 &lt; -1)

标签: matlab logic boolean-logic


【解决方案1】:

因为它真的是这样的:

(-5 < -3) < -1

-5

1

最终答案:0。

【讨论】:

    【解决方案2】:

    MATLAB operates left to right for the less than operator.

    所以你正在评估

    -5 < -3 < -1
    TRUE < -1
    FALSE
    

    【讨论】:

    • 哈哈。我正要删除我的答案
    • 不,离开它。这个答案很好,因为您已链接到有关该行为的官方文档。得票最高的答案是出于纯粹的逻辑,但除了解释结果的产生方式之外,您还提供了记录此行为的官方链接。如果我是 OP,我个人会接受这个答案。
    • 嘘,我不管。我不知道 MATLAB 的内部原理 但布尔逻辑?我很清楚。大多数语言在-5 &lt; -3 &lt; -1 语句中都会出现语法错误,因为它们关心布尔值不能与整数进行比较,但在不太严格的语言中,布尔值 TRUE 与整数 1 完全相同(任何非零值评估 to true,但 true 显式存储为 1)。所以我立刻明白发生了什么。括号也是一直存在的东西。即使5 + 3 + 2 确实是(5 + 3) + 2,但我们不会写下来。
    • @Draco18s 实际上,在 Python 中,执行-5 &lt; -3 &lt; -1 等价于执行-5 &lt; -3 &amp;&amp; -3 &lt; -1,其计算结果为True link - start at Comparisons can be chained arbitrarily...。我们不能假设这种假设行为在所有编程语言中都是相同的。这就是为什么我更喜欢这个答案,因为它与官方文档相关联。 FWIW,我确实赞成你的答案,因为它很快就到了重点,但你不能从逻辑上假设你的答案对所有编程语言都成立。
    • @Draco18s 是的,但一些古老的著名语言甚至更糟。事实是,在 C 中,没有定义是否首先评估 -5 &lt; -3-3 &lt; -1... 运气不好还是我猜的。我会说,在具有相同优先级的运算符的情况下,在它们所属的位置放置括号是一种很好的做法。
    猜你喜欢
    • 1970-01-01
    • 2020-04-10
    • 1970-01-01
    • 2014-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-04
    相关资源
    最近更新 更多