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)
要为此制定算法,您需要知道如何在三变量中使用卡诺图。请参阅此处的卡诺地图样本
好的。首先,为了让事情变得更容易,在真值表中将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。
对于第二个表达式AB'。
对于第三个表达式B'C。
对于第四个表达式 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)