L'operatore XOR in Java

1. Panoramica

In questo breve tutorial, impareremo a conoscere l' operatore Java XOR . Esamineremo un po 'di teoria sulle operazioni XOR e poi vedremo come implementarle in Java.

2. L' operatore XOR

Cominciamo con un piccolo promemoria della semantica dell'operazione XOR . L' operazione logica XOR , o esclusivo o , accetta due operandi booleani e restituisce true se e solo se gli operandi sono diversi. Pertanto, restituisce false se i due operandi hanno lo stesso valore.

Quindi, l' operatore XOR può essere utilizzato, ad esempio, quando dobbiamo verificare due condizioni che non possono essere vere allo stesso tempo.

Consideriamo due condizioni, A e B. Quindi la tabella seguente mostra i possibili valori di A XOR B :

L' operazione A XOR B è equivalente a (A AND! B) OR (! A AND B) . Le parentesi sono state incluse per chiarezza, ma sono facoltative, poiché l' operatore AND ha la precedenza sull'operatore OR .

3. Come farlo in Java?

Vediamo ora come esprimere l' operazione XOR in Java. Ovviamente abbiamo la possibilità di usare && e || operatori, ma questo può essere un po 'prolisso , come vedremo.

Immagina una classe Auto con due attributi booleani : diesel e manuale . E ora, diciamo di voler dire se l'auto è diesel o manuale, ma non entrambe.

Controlliamo questo usando && e || operatori:

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

È un po 'lungo, soprattutto considerando che abbiamo un'alternativa: l' operatore Java XOR , rappresentato dal simbolo ^ . È un operatore bit per bit, ovvero un operatore che confronta i bit corrispondenti di due valori per restituire un risultato. Nel caso XOR , se due bit della stessa posizione hanno lo stesso valore, il bit risultante sarà 0. Altrimenti, sarà 1.

Quindi, invece della nostra ingombrante implementazione XOR , possiamo usare direttamente l' operatore ^ :

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

Come possiamo dire, l' operatore ^ ci permette di essere più concisi nell'esprimere le operazioni XOR .

Infine, vale la pena ricordare che l' operatore XOR , come gli altri operatori bit per bit, funziona con ogni tipo primitivo. Ad esempio, consideriamo due numeri interi 1 e 3, le cui rappresentazioni binarie sono rispettivamente 00000001 e 000000011. Quindi, utilizzando l' operatore XOR tra di loro risulterà il numero intero 2:

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

Solo il secondo bit è diverso in quei due numeri, quindi il risultato dell'operatore XOR su questo bit sarà 1. Tutti gli altri bit sono identici, quindi il loro risultato XOR bit per bit è 0, dandoci un valore finale di 00000010 - la rappresentazione binaria dell'intero 2.

4. Conclusione

In questo articolo, abbiamo appreso dell'operatore Java XOR . Abbiamo visto che offre un modo conciso per esprimere le operazioni XOR .

Come al solito, il codice completo dell'articolo può essere trovato su GitHub.