以下代码
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));
Run Code Online (Sandbox Code Playgroud)
输出:
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
Run Code Online (Sandbox Code Playgroud)
true当所有三个输入都是true?时,为什么XOR会返回?
如果它是有效的逻辑,我怎样才能实现true 仅在其中一个输入元素返回时返回的逻辑true(无论我提供多少输入)?
Gon*_*alo 17
如果您想要一个真实的结果,如果只有一个输入为真,您可以使用:
(a ^ b ^ c ) ^ ( a && b && c )
Run Code Online (Sandbox Code Playgroud)
测试用例结果:
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
Run Code Online (Sandbox Code Playgroud)
Cod*_*key 11
因为true xor true = false,false xor true为true.xor是关联的,因此您可以按照自己喜欢的方式对值进行分组!
要确定其中只有一个为真,您可以将这些值一起作为整数添加,并查看答案是否为1.
我回答这是一个通用的编程问题,它确实不是Java特有的.
这是一种确定一个布尔值是否为真的 Java 8 方法:
Stream.of(b1, b2, b3, ...)
.filter(b -> b)
.count() == 1;
Run Code Online (Sandbox Code Playgroud)
想想编译器如何评估这个:
(true ^ true) ^ true
Run Code Online (Sandbox Code Playgroud)
第一项后true ^ true,这是false已被评估:
(false) ^ true ==> true
Run Code Online (Sandbox Code Playgroud)