【问题标题】:XOR operation on three values对三个值进行异或运算
【发布时间】:2019-02-06 02:23:23
【问题描述】:

我有三个布尔值。如果三个都是true 或者三个都是false,我需要返回false。在其他所有情况下,我都会返回 true。根据我的研究,在某些规范中,这称为三变量异或。

编辑:一些规范声称三变量 XOR 涉及唯一的 true 结果将来自只有一个参数是 true 的集合。我在这里指的 XOR 是另一个规范,其中多个值可能是 true,但不是全部。

  • 执行此操作的最快方法是什么? a xor b xor c 不起作用

  • 如果不是三个而是n个参数怎么办?

这是我想要的操作的真值表(三个参数的异或)。

A   B   C   -
T   T   T   F
T   T   F   T
T   F   T   T
T   F   F   T
F   T   T   T
F   T   F   T
F   F   T   T
F   F   F   F

【问题讨论】:

  • XOR of three values的可能重复
  • @subdeveloper 不幸的是没有。编辑我的问题以进一步解释原因。在那个问题中,他问I want a statement that evaluates to true IFF only one of the three values is true. 这和我的不一样。

标签: boolean logical-operators boolean-logic xor


【解决方案1】:

要为此制定算法,您需要知道如何在三个变量中使用卡诺图。见样本卡诺图here

好的。首先,为了让事情更容易在你的真值表中替换 T 为 1 和 F 为 0

乍一看,它只是一个递增的 3 位二进制文​​件。因此,以增加的方式安排它是一个好主意。看看下面。

A   B   C       F(A,B,C)
0   0   0       0
0   0   1       1
0   1   0       1
0   1   1       1
1   0   0       1
1   0   1       1
1   1   0       1
1   1   1       0

通过使用卡诺图,您将在下面得到一个布尔表达式。 对于第一个表达式,我们得到 A'B

对于第二个表达式AB'

对于第三个表达式 B'C

对于第四个表达式BC'

为了简单地理解卡诺图,如果所有 1 都在变量表的直视范围内,则表达式的一个术语将仅包含该变量。但如果 1 的 超出了该变量的视线范围,那么它就是该变量的补充。

F(A,B,C) = A'B + AB'+ B'C + BC'

但是因为

A XOR B = AB'+ A'B
B XOR C = BC'+ B'C

那么我们的简化形式将是

F(A,B,C) = A XOR B + B XOR C

对于伪代码编程,相当于

result = (A XOR B) OR (B XOR C)
//other else
result = (A ^ B) | (B ^ C)

【讨论】:

  • 哇,很棒的阅读。你能解释一下你是如何从 3 位二进制步骤到F(A,B,C) = A'B + AB'+ B'C 步骤的吗?
  • 对不起,我忘了 BC' 。应该是 F(A,B,C) = A'B + AB'+ B'C + BC'
  • 谢谢。在这一步:A XOR B = AB'+ A'B+ 代表OR?
  • @Hatefield 是的,你是对的。就像乘法是 AND 而加法是 OR,但是,它们的含义不同。这主要用于布尔表达式分析。
【解决方案2】:

使用这个

(A xor B) 或 (B xor C)

也适用于n 输入。

(A xor B) 或 (B xor C) ... 或 (n xor n+1)

【讨论】:

  • 谢谢。几分钟前,我和一个朋友一起得到了这个答案。很高兴这是正确的。
  • 很高兴你改变了接受的答案,Leandro 的答案更详细。
【解决方案3】:

听到的是我的python实现

def xor_three(a, b, c):
    return (a ^ b) or (b ^ c)

A = True
B = False
C = True

print(xor_three(A, B, C))

【讨论】:

    猜你喜欢
    • 2020-10-19
    • 2019-06-21
    • 1970-01-01
    • 1970-01-01
    • 2011-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-11
    相关资源
    最近更新 更多