2012-09-06 7 views
6

Gegeben:Was macht ein bitweises exklusives ODER in 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"); 
     } 
    } 
} 

Warum dieser Beispielcode Ausgabe etwas nicht?

Antwort

11

In zuerst, wenn Sie true^true = false
In Sekunden, wenn man bekommt false^false = false
becouse ^ - OR exclusive opeartor ist, ist es bedeutet

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

So kann man daran denken, wie diese dann. Wenn True ein positives und False ein negatives, dann ein negatives mal ein positives gleich einem positiven, ein negatives mal ein negatives gleich einem negativen und ein positives mal ein positives gleich einem negativen .... es ist völlig rückwärts :) –

8

Sie verwenden boolean exklusive ODER und das ist sehr ähnlich wie !=. Im ersten Fall sind beide Bedingungen wahr und in der zweiten sind beide Bedingungen falsch, so dass keine Verzweigung genommen wird. (Sie können dies mit dem Debugger in Ihrem IDE)

Der einzige wirkliche Unterschied ist, dass != hat eine höhere Priorität als &, die höher ist als ^

1

Es druckt nicht alles, denn wenn der XOR-Operator mit boolean Argumenten verwendet wird (im Gegensatz zu ganzen Zahlen entgegengesetzt) ​​wird nur true zurück, wenn genau eine der zwei Operanden true ist.

In Ihren ersten if beiden Teilen bewerten zu true und true^true == false

In Ihren zweiten if beiden Teilen auswerten zu false und false^false == false