Operatorul XOR în Java

1. Prezentare generală

În acest scurt tutorial, vom afla despre operatorul Java XOR . Vom trece printr-un pic de teorie despre operațiile XOR și apoi vom vedea cum să le implementăm în Java.

2. Operatorul XOR

Să începem cu un mic memento al semanticii operației XOR . Operația logică XOR , sau exclusivă sau , ia doi operanzi booleeni și returnează adevărat dacă și numai dacă operanzii sunt diferiți. Astfel, returnează fals dacă cei doi operanzi au aceeași valoare.

Deci, operatorul XOR poate fi utilizat, de exemplu, atunci când trebuie să verificăm două condiții care nu pot fi adevărate în același timp.

Să luăm în considerare două condiții, A și B. Apoi, următorul tabel prezintă valorile posibile ale lui A XOR B :

Operațiunea A XOR B este echivalentă cu (A ȘI! B) SAU (! A ȘI B) . Parantezele au fost incluse pentru claritate, dar sunt opționale, deoarece operatorul AND are prioritate față de operatorul OR .

3. Cum se face în Java?

Acum, să vedem cum să exprimăm operația XOR în Java. Desigur, avem posibilitatea de a utiliza && și || operatori, dar acest lucru poate fi un pic vorbăreț , așa cum vom vedea.

Imaginați-vă o clasă de mașini care are două atribute booleene : diesel și manual . Și acum, să presupunem că vrem să spunem dacă mașina este fie diesel, fie manuală, dar nu ambele.

Să verificăm acest lucru folosind && și || operatori:

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

Este cam lung, mai ales având în vedere că avem o alternativă - operatorul Java XOR , reprezentat de simbolul ^ . Este un operator bitwise - adică un operator care compară biții de potrivire a două valori pentru a returna un rezultat. În cazul XOR , dacă doi biți de aceeași poziție au aceeași valoare, bitul rezultat va fi 0. În caz contrar, va fi 1.

Deci, în loc de greoaia noastră implementare XOR , putem folosi direct operatorul ^ :

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

După cum putem vedea, operatorul ^ ne permite să fim mai conciși în exprimarea operațiilor XOR .

În cele din urmă, merită menționat faptul că operatorul XOR , la fel ca ceilalți operatori bit-bit, funcționează cu fiecare tip primitiv. De exemplu, să luăm în considerare două numere întregi 1 și 3, ale căror reprezentări binare sunt 00000001 și, respectiv, 000000011. Apoi, folosind operatorul XOR între ele va rezulta numărul întreg 2:

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

Numai al doilea bit este diferit în aceste două numere, prin urmare rezultatul operatorului XOR pe acest bit va fi 1. Toți ceilalți biți sunt identici, astfel rezultatul lor XOR în biți este 0, oferindu-ne o valoare finală de 00000010 - reprezentarea binară a întregului 2.

4. Concluzie

În acest articol, am aflat despre operatorul Java XOR . Am văzut că oferă o modalitate concisă de a exprima operațiile XOR .

Ca de obicei, codul complet al articolului poate fi găsit pe GitHub.