El operador XOR en Java

1. Información general

En este breve tutorial, aprenderemos sobre el operador Java XOR . Repasaremos un poco de teoría sobre las operaciones XOR y luego veremos cómo implementarlas en Java.

2. El operador XOR

Comencemos con un pequeño recordatorio de la semántica de la operación XOR . La operación lógica XOR , o exclusiva o , toma dos operandos booleanos y devuelve verdadero si y solo si los operandos son diferentes. Por tanto, devuelve falso si los dos operandos tienen el mismo valor.

Entonces, el operador XOR se puede usar, por ejemplo, cuando tenemos que verificar dos condiciones que no pueden ser verdaderas al mismo tiempo.

Consideremos dos condiciones, A y B. Luego, la siguiente tabla muestra los posibles valores de A XOR B :

La operación A XOR B es equivalente a (A AND! B) OR (! A AND B) . Se han incluido paréntesis para mayor claridad, pero son opcionales, ya que el operador AND tiene prioridad sobre el operador OR .

3. ¿Cómo hacerlo en Java?

Ahora, veamos cómo expresar la operación XOR en Java. Por supuesto, tenemos la posibilidad de utilizar && y || operadores, pero esto puede ser un poco complicado , como veremos.

Imagine una clase de automóvil con dos atributos booleanos : diésel y manual . Y ahora, digamos que queremos saber si el automóvil es diésel o manual, pero no ambos.

Comprobemos esto usando && y || operadores:

Car car = Car.dieselAndManualCar(); boolean dieselXorManual = (car.isDiesel() && !car.isManual()) || (!car.isDiesel() && car.isManual());

Eso es un poco largo, especialmente considerando que tenemos una alternativa: el operador Java XOR , representado por el símbolo ^ . Es un operador bit a bit, es decir, un operador que compara los bits coincidentes de dos valores para devolver un resultado. En el caso de XOR , si dos bits de la misma posición tienen el mismo valor, el bit resultante será 0. De lo contrario, será 1.

Entonces, en lugar de nuestra engorrosa implementación XOR , podemos usar directamente el operador ^ :

Car car = Car.dieselAndManualCar(); boolean dieselXorManual = car.isDiesel() ^ car.isManual();

Como podemos ver, el operador ^ nos permite ser más concisos al expresar las operaciones XOR .

Finalmente, vale la pena mencionar que el operador XOR , al igual que los otros operadores bit a bit, funciona con todos los tipos primitivos. Por ejemplo, consideremos dos números enteros 1 y 3, cuyas representaciones binarias son 00000001 y 000000011, respectivamente. Luego, usar el operador XOR entre ellos resultará en el número entero 2:

assertThat(1 ^ 3).isEqualTo(2);

Solo el segundo bit es diferente en esos dos números, por lo tanto, el resultado del operador XOR en este bit será 1. Todos los demás bits son idénticos, por lo que su resultado XOR bit a bit es 0, lo que nos da un valor final de 00000010 - la representación binaria del entero 2.

4. Conclusión

En este artículo, aprendimos sobre el operador Java XOR . Vimos que ofrece una forma concisa de expresar las operaciones XOR .

Como de costumbre, el código completo del artículo se puede encontrar en GitHub.