L'opérateur XOR en Java

1. Vue d'ensemble

Dans ce court tutoriel, nous allons en apprendre davantage sur l' opérateur Java XOR . Nous allons parcourir un peu de théorie sur les opérations XOR , puis nous verrons comment les implémenter en Java.

2. L' opérateur XOR

Commençons par un petit rappel de la sémantique de l' opération XOR . L' opération logique XOR , ou exclusive ou , prend deux opérandes booléens et retourne true si et seulement si les opérandes sont différents. Ainsi, il renvoie false si les deux opérandes ont la même valeur.

Ainsi, l' opérateur XOR peut être utilisé, par exemple, lorsque nous devons vérifier deux conditions qui ne peuvent pas être vraies en même temps.

Considérons deux conditions, A et B. Ensuite, le tableau suivant montre les valeurs possibles de A XOR B :

L'opération A XOR B est équivalente à (A AND! B) OR (! A AND B) . Des parenthèses ont été incluses pour plus de clarté, mais sont facultatives, car l' opérateur AND est prioritaire sur l' opérateur OR .

3. Comment le faire en Java?

Voyons maintenant comment exprimer l' opération XOR en Java. Bien sûr, nous avons la possibilité d'utiliser les && et || opérateurs, mais cela peut être un peu verbeux , comme nous allons le voir.

Imaginez une classe Car ayant deux attributs booléens : diesel et manuel . Et maintenant, disons que nous voulons dire si la voiture est soit diesel ou manuelle, mais pas les deux.

Vérifions cela en utilisant les symboles && et || les opérateurs:

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

C'est un peu long, d'autant plus que nous avons une alternative - l' opérateur Java XOR , représenté par le symbole ^ . C'est un opérateur au niveau du bit - c'est-à-dire un opérateur comparant les bits correspondants de deux valeurs afin de renvoyer un résultat. Dans le cas XOR , si deux bits de la même position ont la même valeur, le bit résultant sera 0. Sinon, ce sera 1.

Ainsi, au lieu de notre lourde implémentation XOR , nous pouvons directement utiliser l' opérateur ^ :

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

Comme nous pouvons le voir, l' opérateur ^ nous permet d'être plus concis dans l'expression des opérations XOR .

Enfin, il convient de mentionner que l' opérateur XOR , comme les autres opérateurs au niveau du bit, fonctionne avec tous les types primitifs. Par exemple, considérons deux entiers 1 et 3, dont les représentations binaires sont respectivement 00000001 et 000000011. Ensuite, l'utilisation de l' opérateur XOR entre eux entraînera l'entier 2:

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

Seul le deuxième bit est différent dans ces deux nombres, donc le résultat de l' opérateur XOR sur ce bit sera 1. Tous les autres bits sont identiques, donc leur résultat XOR au niveau du bit est 0, ce qui nous donne une valeur finale de 00000010 - la représentation binaire de l'entier 2.

4. Conclusion

Dans cet article, nous avons découvert l' opérateur Java XOR . Nous avons vu qu'il offre un moyen concis d'exprimer les opérations XOR .

Comme d'habitude, le code complet de l'article est disponible sur GitHub.