在我的 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。
答案 0 :(得分:4)
(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 other
或x 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 不等于y,则x必须等于z。因此,x is equal to one of [y|z] but not the other
。
答案 1 :(得分:3)
大声读出数值,就好像你在写一个句子一样。
请注意,exclusive或仅当一个为true时返回true,包含意味着一个或两个值必须为true才能返回true。
在英语陈述中,排他性或包含性'或'通常是含蓄的。也就是说,人们使用'或'有两种不同的含义:
独家:我死了或者我没死。
包容:我们去公园或者去吃冰淇淋。
这是对这两者的随意解释,但我认为这就是你想要的。第一个陈述必须要求如果一个是真的,另一个不是,所以它是一个独家或。第二个是包容性的,因为去公园和吃冰淇淋是可能的,但任何一个人就足够了。
在我的例子中,OR =包含或,XOR = exclusive或。
(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不等于其中一个值,则右边仅计算结果为true。左边和右边的表达式都必须为true才能返回true,因为它们之间存在AND。
因此,等效的简化陈述是:x等于两个值中的一个,x不等于两个值中的一个。
(x == y) != (x == z)
这一个是最简单的。
(x等于y)不等于(x等于z)。
等效陈述:(x等于y)XOR(x等于z)
或者用简单的英语: x等于y或x等于z。
请注意前置或声明的前置如何使其成为独占:
要么你死了,要么你没死。
这明确表示一个独占的'或',而不是一个包含的。