按位异或在Java中做什么?

按位异或在Java中做什么?,java,scjp,Java,Scjp,鉴于: 为什么此示例代码不输出任何内容?您使用的是布尔异或,这与基本相同=。在第一种情况下,这两个条件都是真的,而在第二种情况下,这两个条件都是假的,因此都不执行分支。(您可以使用IDE中的调试器进行检查) 唯一真正的区别是=的优先级高于&,如果您得到true^true=false 如果您得到false^false=false 因为^-是或独占的运营商,它的意思是 public class Spock { public static void main(String[] args) {

鉴于:

为什么此示例代码不输出任何内容?

您使用的是布尔异或,这与
基本相同=。在第一种情况下,这两个条件都是真的,而在第二种情况下,这两个条件都是假的,因此都不执行分支。(您可以使用IDE中的调试器进行检查)


唯一真正的区别是
=
的优先级高于
&
,如果您得到
true^true=false

如果您得到
false^false=false

因为
^
-是
或独占的
运营商,它的意思是

public class Spock {
    public static void main(String[] args) {
        Long tail = 2000L;
        Long distance = 1999L;
        Long story = 1000L;
        if ((tail > distance) ^ ((story * 2) == tail)) {
            System.out.print("1");
        }
        if ((distance + 1 != tail) ^ ((story * 2) == distance)) {
            System.out.print("2");
        }
    }
}


对于^,如果操作数值不同,则结果值为true;否则,结果为false。

它不会打印任何内容,因为当XOR运算符与布尔参数(与整数相反)一起使用时,如果两个操作数中正好有一个为
true
,则只会返回
true

在第一个
if
中,两个部分的计算结果都是
true
true^true==false


在第二个
中,如果
两个部分的计算结果都是
false
false^false==false

,那么您可以这样想。如果真代表正,假代表负,那么负乘以正等于正,负乘以负等于负,正乘以正等于负……这是完全相反的:)
true ^ true = false  
true ^ false = true 
false ^ true = true 
false ^ false = false