在Java XOR中,三个真实输入返回true。为什么?

时间:2011-06-03 01:42:51

标签: java logic xor

以下代码

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>

7 个答案:

答案 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 ^ truefalse)已经过评估:

(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

他们是一样的。 请纠正或指导我对此案有所了解。