Java中的按位异或运算符是什么?

6

给定:

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");
        }
    }
}

为什么这个示例代码没有输出任何内容?
4个回答

11

在第一个if语句中,如果您获得true ^ true = false
在第二个if语句中,如果您获得false ^ false = false
因为^异或运算符,它的意思是

true ^ true = false  
true ^ false = true 
false ^ true = true 
false ^ false = false

那么你可以这样想。如果True表示正,False表示负,那么负乘正等于正,负乘负等于负,正乘正等于负... 这完全是相反的 :) - Kyle Bridenstine

9
你正在使用布尔异或运算符,这与“!=”非常相似。在第一种情况下,两个条件都为真,在第二种情况下,两个条件都为假,因此不会执行任何分支。(您可以在IDE的调试器中检查此内容)
唯一的真正区别是,“!=”比“&”的优先级高,而“&”的优先级高于“^”。

4

1

它不打印任何东西,因为当使用异或运算符与布尔参数(而不是整数)时,只有在两个操作数中恰好有一个为true时才会返回true

在您的第一个if中,两个部分都评估为true,并且true ^ true == false

在您的第二个if中,两个部分都评估为false,并且false ^ false == false


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接