三个值的异或运算

Hat*_*end 5 boolean-logic boolean xor logical-operators

我有三个布尔值。false如果所有三个都是true或者如果所有三个都是 ,我需要返回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
Run Code Online (Sandbox Code Playgroud)

Lea*_*apa 7

要为此制定算法,您需要知道如何在三变量中使用卡诺图。请参阅此处的卡诺地图样本

好的。首先,为了让事情变得更容易,在真值表中将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
Run Code Online (Sandbox Code Playgroud)

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

见图1

对于第二个表达式AB'

见图2

对于第三个表达式B'C

见图3

对于第四个表达式 BC'

在此输入图像描述

为了简单地理解卡诺图,如果所有1 都在变量表的直线范围内,那么表达式的一项将仅包含该变量。但如果1 位于该变量的直接视线之外,那么,它是该变量的补充。

F(A,B,C) = A'B + AB'+ B'C + BC'
Run Code Online (Sandbox Code Playgroud)

但是由于

A XOR B = AB'+ A'B
B XOR C = BC'+ B'C
Run Code Online (Sandbox Code Playgroud)

那么我们的简化形式将是

F(A,B,C) = A XOR B + B XOR C
Run Code Online (Sandbox Code Playgroud)

对于伪代码编程,它相当于

result = (A XOR B) OR (B XOR C)
//other else
result = (A ^ B) | (B ^ C)
Run Code Online (Sandbox Code Playgroud)