我有三个布尔值。如果三个都是false
或三个都是true
,我需要返回false
。我将在其他所有情况下返回true
。根据我的研究,在某些规范中,这称为三变量异或。
编辑:一些规范声称三个变量XOR涉及唯一的true
结果将来自一个只有一个参数是true
的集合。我在这里指的XOR是另一个规范,其中多个值可能是true
,但不是全部。
a xor b xor c
不起作用这是我所需操作的真值表(xor有三个参数)。
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
要为此制作算法,您需要知道如何在三个变量中使用卡诺图。查看示例卡诺图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
通过使用karnaugh-map,您将获得下面的布尔表达式。对于第一个表达式,我们得到了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)
用这个
(A x或B)或(B x或C)
适用于n
输入。
(A x或B)或(B xor C)......或(n x或n + 1)