【问题标题】:Why is this answer to a boolean expression thingie correct?为什么这个布尔表达式的答案是正确的?
【发布时间】:2014-04-13 04:22:05
【问题描述】:

在我的Be Prepared Comp Sci 教科书中,我遇到了这个问题:

假设x、y、z为整型变量,以下三个逻辑表达式中哪一个是等价的,即对x、y、z的所有可能取值都相等?

(x == y && x != z) || (x != y && x == z)
(x == y || x == z) && (x != y || x != z)
(x == y) != (x == z)

A. None of the three
B. I and II only
C. II and III only
D. I and III only
E. I, II, and III

我选择了“B”,但弄错了。我真的认为我需要帮助理解布尔逻辑。正确的答案说的是别的,但我不明白逻辑。正确答案如下:

表达式 III 是答案的关键:所有三个表达式都说明了这样一个事实,即 x == y 或 x == z 两个等式中恰好有一个为真。

表达式 I 声明第一个而不是第二个或第二个而不是第一个是正确的。
表达式 II 表明两者之一为真,而两者之一为假。
表达式 III 只是说明它们具有不同的值。

这三个都归结为同一件事。答案是E。

【问题讨论】:

    标签: boolean-logic boolean-expression boolean-operations


    【解决方案1】:
    (x == y && x != z) || (x != y && x == z)
    
    (x == y || x == z) && (x != y || x != z)
    
    (x == y) != (x == z)
    

    让我们分解一下。

    (x == y && x != z) || (x != y && x == z)
    x is equal to y and not z, or x is equal to z and not y
    

    所以基本上,x is equal to one of [y|z], but y != z

    (x == y || x == z) && (x != y || x != z)
    x is equal to y or x is equal to z, and x is not equal to y or x is not equal to z
    

    这有点复杂。它几乎可以归结为x equals one of [y|z] but not the otherx is equal to y and not z, or x is equal to z and not y,与第一个等式相同。

    这是因为(x == y) 将使等式的前半部分为真,但因此x != y 在后半部分必须为假。因此,要保持等式的后半部分为真,x 必须不等于 z。您可以将此逻辑翻转为表示 x == z 但 x != y 如果您愿意。如上所述,这归结为x is equal to one of [y|z] but not the other

    (x == y) != (x == z)
    The value of the expression x == y is the opposite of the value of the expression x == z.
    

    这也有点复杂,但效果相同。如果 x 等于 y,要保持陈述为真,x 必须不等于 z。相反,如果 x not 等于 y,则 x 必须等于 z。因此,x is equal to one of [y|z] but not the other

    【讨论】:

      【解决方案2】:

      像在写一个句子一样大声读出这些值。

      请注意,exclusive or 仅在一个为 true 时才返回 true,inclusive 意味着一个或两个值必须为 true 才能返回 true。

      在英语陈述中,排他性/包含性“或”通常是隐含的。也就是说,人们使用“或”有两种不同的含义:

      独家:我死了或者我没死。

      包容性:我们去公园或吃冰淇淋吧。

      这是对两者的随意解释,但我认为这就是您想要的。第一个陈述必须,如果一个是真的,另一个不是,所以它是一个异或。第二个是包容性的,因为去公园吃冰淇淋是可能的,但单独一个就足够了。

      在我的示例中,OR = 包含或,XOR = 异或。


      (x == y && x != z) || (x != y && x == z)

      (x 等于 y 但不等于 z) OR (x 不等于 y 但等于 z)

      在任何一种情况下,当且仅当 x 等于 一个 其他变量时,该语句才返回 true。如果 x == y 和 x == z,那么两边的表达式都会失败。


      (x == y || x == z) && (x != y || x != z)

      (x 等于 y OR x 等于 z) AND (x 不等于 y OR x 不等于 z)

      只有当 x 等于两个值之一时,left 才计算为 true。仅当 x 不等于其中一个值时,右才计算为真。左右表达式都必须为真,整个事情才能返回真,因为它们之间有一个 AND。

      因此,等效的简化语句是:x 等于两个值之一,x 不等于两个值之一。


      (x == y) != (x == z)

      这个是最简单的。

      (x 等于 y) 不等于 (x 等于 z)。

      等价语句:(x等于y)异或(x等于z)

      或者用简单的英语:either x 等于 y 或 x 等于 z。

      注意在 or 语句的前面加上前缀是如何使它排他性的:

      要么你死了,要么你没死。

      这明确表示排他的“或”而不是包容的。

      【讨论】:

        猜你喜欢
        • 2021-12-28
        • 1970-01-01
        • 1970-01-01
        • 2020-06-24
        • 2021-10-05
        • 1970-01-01
        • 1970-01-01
        • 2021-10-09
        相关资源
        最近更新 更多