Зачем нужно исключающее ИЛИ (XOR) и где оно встречается на практике?
Узнал про операцию XOR (исключающее ИЛИ, ⊕). С таблицей разобрался — даёт 1 когда значения разные. Но не пойму, зачем оно нужно отдельно, если есть обычные И/ИЛИ. Где XOR реально применяют? Хочется понять смысл, а не просто запомнить таблицу.
2 ответа
XOR (⊕) даёт 1, когда операнды различны, и 0, когда одинаковы:
| A | B | A⊕B |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
Где он реально пригождается:
-
Проверка «значения разные». Если надо узнать, отличаются ли два бита/флага — это ровно XOR. Например, «горит ли ровно одна лампочка из двух».
-
Простое шифрование. Если текст XOR-ить с ключом, а потом результат снова XOR-ить с тем же ключом — получишь исходный текст. Потому что
A ⊕ B ⊕ B = A. Свойство «обратимости» — суперполезное. -
Поменять две переменные без третьей (старый трюк):
a^=b; b^=a; a^=b;. -
Найти непарный элемент: если все числа в массиве идут парами и одно лишнее — проксорь все, парные сократятся, останется лишнее.
Так что XOR — это не «лишнее ИЛИ», а отдельный полезный инструмент про различие.
Маленькая, но важная связь: XOR — это отрицание эквивалентности. A⊕B = ¬(A≡B). Эквивалентность спрашивает «одинаковые?», XOR — «разные?». Если на это смотреть так, обе таблицы запоминаются за один присест.