Der XOR-Operator in Java

1. Übersicht

In diesem kurzen Tutorial lernen wir den Java XOR- Operator kennen. Wir werden ein bisschen Theorie über XOR- Operationen durchgehen und dann sehen, wie man sie in Java implementiert.

2. Der XOR- Operator

Beginnen wir mit einer kleinen Erinnerung an die Semantik der XOR- Operation. Die logische XOR- Operation oder exklusiv oder verwendet zwei boolesche Operanden und gibt genau dann true zurück, wenn die Operanden unterschiedlich sind. Daher wird false zurückgegeben, wenn die beiden Operanden denselben Wert haben.

So kann der XOR- Operator beispielsweise verwendet werden, wenn zwei Bedingungen überprüft werden müssen, die nicht gleichzeitig zutreffen können.

Betrachten wir zwei Bedingungen, A und B. Dann zeigt die folgende Tabelle die möglichen Werte von A XOR B :

Die Operation A XOR B entspricht (A UND! B) ODER (! A UND B) . Aus Gründen der Übersichtlichkeit wurden Klammern eingefügt, die jedoch optional sind, da der AND- Operator Vorrang vor dem OR- Operator hat.

3. Wie geht das in Java?

Lassen Sie uns nun sehen, wie die XOR- Operation in Java ausgedrückt wird. Natürlich haben wir die Möglichkeit, die && und || zu verwenden Betreiber, aber das kann ein bisschen wortreich sein , wie wir sehen werden.

Stellen Sie sich eine Autoklasse mit zwei booleschen Attributen vor: Diesel und manuell . Nehmen wir an, wir möchten feststellen, ob das Auto entweder Diesel oder manuell ist, aber nicht beides.

Lassen Sie uns dies mit && und || überprüfen Betreiber:

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

Das ist etwas lang, besonders wenn man bedenkt, dass wir eine Alternative haben - den Java XOR- Operator, der durch das Symbol ^ dargestellt wird . Es ist ein bitweiser Operator, dh ein Operator, der die übereinstimmenden Bits zweier Werte vergleicht, um ein Ergebnis zurückzugeben. Wenn im XOR- Fall zwei Bits derselben Position denselben Wert haben, ist das resultierende Bit 0. Andernfalls ist es 1.

Anstelle unserer umständlichen XOR- Implementierung können wir also direkt den Operator ^ verwenden :

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

Wie wir sehen können, können wir mit dem Operator ^ XOR- Operationen präziser ausdrücken .

Schließlich ist zu erwähnen, dass der XOR- Operator wie die anderen bitweisen Operatoren mit jedem primitiven Typ funktioniert. Betrachten wir zum Beispiel zwei ganze Zahlen 1 und 3, deren binäre Darstellungen 00000001 bzw. 000000011 sind. Wenn Sie dann den XOR- Operator zwischen ihnen verwenden, erhalten Sie die Ganzzahl 2:

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

Nur das zweite Bit unterscheidet sich in diesen beiden Zahlen, daher ist das Ergebnis des XOR- Operators für dieses Bit 1. Alle anderen Bits sind identisch, daher ist ihr bitweises XOR- Ergebnis 0, was uns einen Endwert von 00000010 ergibt - die binäre Darstellung der ganzen Zahl 2.

4. Fazit

In diesem Artikel haben wir den Java XOR- Operator kennengelernt . Wir haben gesehen, dass es eine präzise Möglichkeit bietet, XOR- Operationen auszudrücken .

Den vollständigen Code des Artikels finden Sie wie gewohnt auf GitHub.