2012-09-06 22 views
6

考慮:Java中按位異或做什麼?

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

爲什麼此示例代碼不輸出什麼?

回答

11

在第一,如果你得到true^true = false
在第二,如果你得到false^false = false
becouse ^ - 被OR exclusive opeartor,這意味着

true^true = false 
true^false = true 
false^true = true 
false^false = false 
+0

所以,你可以把它這樣便。如果True表示一個正數,False表示一個負數,然後一個負數表示一個正數表示一個正數,一個負數表示一個負數表示一個負數,一個正數表示一個正數表示一個負數......它完全倒退:) –

8

您正在使用布爾異或,這是一樣一樣的!=。在第一種情況下,兩種情況都是正確的,而第二種情況下,兩種情況都是錯誤的,因此都不支持分支。 (你可以在你的IDE與調試器檢查)

唯一真正的區別是,!=的優先級比&更高,高於^

1

因爲當XOR運算與布爾參數一起使用(而不是整數)不顯示任何信息將只返回true如果正好2個操作數是true

在你的第一個if兩個部分計算爲truetrue^true == false

在你的第二個if兩個部分計算爲falsefalse^false == false