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.