我有三个布尔值。如果三个都是false
或三个都是true
,我需要返回false
。在其他所有情况下,我都会返回true
。根据我的研究,在某些规范中,这称为三变量异或。
编辑:一些规范声称三个变量XOR涉及唯一的true
结果将来自仅一个参数为true
的集合。我在这里指的XOR是另一个规范,其中多个值可能是true
,但不是全部。
执行此操作的最快方法是什么? a xor b xor c
不起作用
不是三个而是n个参数怎么办?
这是我想要的操作的真值表(带有三个参数的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
答案 0 :(得分:1)
使用此
(A xor B)或(B xor C)
也可用于n
输入。
(A xor B)或(B xor C)...或(n xor n + 1)
答案 1 :(得分: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
通过使用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)
答案 2 :(得分:0)
听听我对它的 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))