以下代码
System.out.println("1 0 0: " + (true ^ false ^ false));
System.out.println("1 0 1: " + (true ^ false ^ true));
System.out.println("1 1 0: " + (true ^ true ^ false));
System.out.println("1 1 1: " + (true ^ true ^ true));
System.out.println("0 0 0: " + (false ^ false ^ false));
System.out.println("0 0 1: " + (false ^ false ^ true));
System.out.println("0 1 0: " + (false ^ true ^ false));
System.out.println("0 1 1: " + (false ^ true ^ true));
输出:
1 0 0: true
1 0 1: false
1 1 0: false
1 1 1: true
0 0 0: false
0 0 1: true
0 1 0: true
0 1 1: false
当所有三个输入都是true
时,为什么XOR会返回true
?
如果它是有效逻辑,如果其中一个输入元素是true
(无论我提供多少输入),我如何实现只返回true
的逻辑?< / p>
答案 0 :(得分:17)
如果您想要一个真实的结果,如果只有一个输入为真,您可以使用:
(a ^ b ^ c ) ^ ( a && b && c )
测试用例结果:
true true true = false
true true false = false
true false true = false
true false false = true
false true true = false
false true false = true
false false true = true
false false false = false
答案 1 :(得分:11)
因为true xor true = false,false xor true为true。 xor是关联的,所以你可以随意对值进行分组!
要确定其中只有一个为真,您可以将这些值一起作为整数添加,并查看答案是否为1.
我将此作为一般编程问题来回答,这对Java来说并不特别。
答案 2 :(得分:6)
考虑编译器如何评估它:
(true ^ true) ^ true
第一个词true ^ true
(false
)已经过评估:
(false) ^ true ==> true
答案 3 :(得分:4)
这是一种确定一个布尔值是否为真的Java 8方法:
Stream.of(b1, b2, b3, ...)
.filter(b -> b)
.count() == 1;
答案 4 :(得分:3)
true ^ true ^ true
可以( true ^ true ) ^ true
编写(用于理解)true
。
如果A,B,C是输入,对于你正在寻找的逻辑,你需要这样的东西
(A & !B & !C) | (!A & B & !C) | (!A & !B & C)
答案 5 :(得分:2)
'^'是二元逻辑运算符,而不是n元运算符。
答案 6 :(得分:0)
我不知道它是否被发现并突出显示,但我注意到如果我们将所有值加在一起(无论有多少),并且看到除以2之后剩下的是什么,我们可以如果false
已离开,请注意结果为0
,如果true
已离开,请注意1
。
示例:
1 ^ 0 ^ 1 ^ 1 = 1
和
(1+0+1+1)%2 = 1
他们是一样的。 请纠正或指导我对此案有所了解。