2012-09-06 16 views
6

dado:¿Qué hace una O exclusiva de bit a bit en 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"); 
     } 
    } 
} 

Por qué este código de ejemplo no hace nada de salida?

Respuesta

11

En primer lugar, si usted consigue true^true = false
En segundo si se obtiene false^false = false
lástima pues ^ - se OR exclusive opeartor, es decir

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

Así se puede pensar en ello como esto entonces. Si True representa un positivo y False representa un negativo, entonces un negativo multiplicado por un positivo es igual a un positivo, un negativo por un negativo es igual a un negativo, y un positivo por un positivo es igual a un negativo .... es completamente retroactivo :) –

8

Usted está usando booleano O exclusivo y esto es muy similar a !=. En el primer caso, ambas condiciones son verdaderas y en el segundo, ambas condiciones son falsas por lo que no se toma ninguna rama. (Esto se puede comprobar con el depurador en su IDE)

La única diferencia real es que != tiene mayor precedencia que & que es superior a ^

1

no imprime nada, porque cuando el operador XOR se utiliza con argumentos booleanos (a diferencia de números enteros) sólo devolverá true si exactamente uno de los operandos es 2 true.

En sus primeros if ambas partes se evalúan como true y true^true == false

En sus segundas if ambas partes evaluar a false y false^false == false