Операторът XOR в Java

1. Общ преглед

В този кратък урок ще научим за оператора Java XOR . Ще преминем през малко теория за XOR операциите и след това ще видим как да ги приложим в Java.

2. Операторът XOR

Нека започнем с малко напомняне за семантиката на операцията XOR . В XOR Логическата операция, или изключително или , се извършва по два булеви операнди и се връща вярно, ако и само ако величините са различни. По този начин връща false, ако двата операнда имат една и съща стойност.

Така че, операторът XOR може да се използва, например, когато трябва да проверим за две условия, които не могат да бъдат истина едновременно.

Нека разгледаме две условия, A и B. Тогава следната таблица показва възможните стойности на A XOR B :

The A XOR B операцията е еквивалентно на (А И! B) или (! А и В) . Скобите са включени за по-голяма яснота, но не са задължителни, тъй като операторът И има предимство пред оператора ИЛИ .

3. Как да го направя в Java?

Сега нека видим как да изразим операцията XOR в Java. Разбира се, имаме възможност да използваме && и || оператори, но това може да е малко многословно , както ще видим.

Представете си автомобил клас, който има два логически атрибута: дизел и ръчен . И сега, да речем, че искаме да кажем дали колата е или дизелова, или ръчна, но не и двете.

Нека проверим това с помощта на && и || оператори:

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

Това е малко дълго, особено като се има предвид, че имаме алтернатива - операторът Java XOR , представен от символа ^ . Това е побитов оператор - т.е. оператор, сравняващ съвпадащите битове на две стойности, за да върне резултат. В случая XOR , ако два бита от една и съща позиция имат една и съща стойност, полученият бит ще бъде 0. В противен случай ще бъде 1.

Така че, вместо нашата тромава XOR реализация, можем директно да използваме оператора ^ :

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

Тъй като можем да уики, операторът ^ ни позволява да бъдем по-кратки в изразяването на XOR операции.

И накрая, заслужава да се спомене, че операторът XOR , както и другите битови оператори, работи с всеки примитивен тип. Например, нека разгледаме две цели числа 1 и 3, чиито двоични представления са съответно 00000001 и 000000011. След това използването на оператора XOR помежду им ще доведе до цяло число 2:

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

Само вторият бит е различен в тези две числа, следователно резултатът от оператора XOR за този бит ще бъде 1. Всички останали битове са идентични, следователно техният битов XOR резултат е 0, което ни дава крайна стойност 00000010 - двоичното представяне от цялото число 2.

4. Заключение

В тази статия научихме за оператора Java XOR . Видяхме, че предлага кратък начин за изразяване на XOR операции.

Както обикновено, пълният код на статията може да бъде намерен в GitHub.