Оператор XOR на Java

1. Огляд

У цьому короткому навчальному посібнику ми дізнаємося про оператор Java XOR . Ми пройдемо трохи теорії про операції XOR , а потім побачимо, як їх реалізувати в Java.

2. Оператор XOR

Почнемо з невеликого нагадування про семантику операції XOR . XOR логічна операція, або виключає або , приймає два логічних операнда і повертає істину , якщо і тільки якщо операнди різні. Таким чином, він повертає значення false, якщо два операнди мають однакове значення.

Отже, оператор XOR може бути використаний, наприклад, коли ми маємо перевірити дві умови, які не можуть бути істинними одночасно.

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

Операція A XOR B еквівалентна (A AND! B) OR (! A AND 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.