Перейти к содержанию

Исключающее ИЛИ (XOR)

Исключающее ИЛИ даёт единицу, когда входы различны, и ноль, когда они одинаковы. Эта операция не укладывается в обычные правила булевой алгебры, но без неё не обходятся ни сумматор, ни бит чётности, ни CRC, ни переключение бита в регистре.

Обновлено Редакция GAW

Исключающее ИЛИ (exclusive OR, XOR) — логическая операция и логический элемент, выход которого равен 1, когда входы различны, и 0, когда они одинаковы. Обозначается ⊕. Инверсия XOR — исключающее ИЛИ-НЕ (XNOR) — даёт 1 при одинаковых входах и служит детектором равенства.

ABA ⊕ B
000
011
101
110

Место в булевой алгебре

Kuphaldt подчёркивает: у XOR нет прямого эквивалента среди операций булевой алгебры — сложения, умножения и дополнения, и привычные тождества к символу ⊕ не применяются. Поэтому его записывают через И и ИЛИ:

A⊕B=AB‾+A‾BA \oplus B = A\overline{B} + \overline{A}B

Любое выражение такого вида — два элемента И и один ИЛИ — заменяется одним элементом XOR. У самой операции полезные свойства: A ⊕ 0 = A, A ⊕ 1 = A', A ⊕ A = 0, и она коммутативна и ассоциативна — порядок операндов в цепочке не важен.

Где применяется

  • Сумматоры. Сумма двух битов — XOR, перенос — И; это полусумматор.
  • Чётность. XOR всех битов слова равен 1, если единиц нечётное число, — так считается бит чётности.
  • CRC и скремблеры. Деление полиномов по модулю 2 в CRC сводится к сдвигам и XOR.
  • Работа с битами. Выражение x ^ mask инвертирует биты по маске; XOR двух слов показывает, какие биты различаются. Маски удобно строить в калькуляторе битовых масок.
  • Управляемый инвертор. Если на один вход подать сигнал, а на другой — управление, элемент пропускает сигнал прямым при 0 и инвертированным при 1.

Схемы с XOR и их таблицы истинности можно собрать в симуляторе логических схем.

Частые вопросы

Почему XOR называют сложением по модулю 2?

Потому что его таблица совпадает с последним разрядом суммы двух битов: 0 + 0 = 0, 0 + 1 = 1, 1 + 0 = 1, 1 + 1 = 10 — младший бит 0. Перенос в старший разряд даёт элемент И. Пара «XOR для суммы, И для переноса» — это полусумматор, с которого начинается любой двоичный сумматор.

Как с помощью XOR переключить бит в регистре?

Применить XOR с маской, где нужный бит равен единице: x ^ (1 << n). Бит, совпадающий с единицей маски, инвертируется, остальные остаются как были, потому что A ⊕ 0 = A. На AVR для порта есть отдельный способ: запись единицы в регистр PINx переключает бит PORTx.

Чем XOR отличается от обычного ИЛИ?

Только строкой «1, 1»: обычное ИЛИ даёт в ней 1, исключающее — 0. Поэтому XOR отвечает на вопрос «различаются ли входы», а ИЛИ — «есть ли хотя бы одна единица». Kuphaldt показывает, как получить XOR из ИЛИ: параллельно ИЛИ ставят элемент И-НЕ на те же входы, а их выходы объединяет элемент И. Пока хотя бы один вход равен 0, И-НЕ выдаёт 1 и И пропускает выход ИЛИ; при двух единицах И-НЕ выдаёт 0, и выход И становится нулём.

Источники

  1. Kuphaldt T. R. Lessons In Electric Circuits, Vol. IV — Digital, ch. 3 «Logic Gates», разд. «The Exclusive-OR gate» и «The Exclusive-NOR gate» (CC BY) — XOR выдаёт высокий уровень, если входы на разных уровнях, и низкий — если на одинаковых; эквивалентная схема: ИЛИ и И-НЕ на общих входах, их выходы объединяет элемент И, который работает буфером для ИЛИ, пока выход И-НЕ высокий, и даёт 0 при двух единицах на входах; XNOR — инверсия XOR, высокий уровень при одинаковых входах
  2. Kuphaldt T. R. Lessons In Electric Circuits, Vol. IV — Digital, ch. 7 «Boolean Algebra», разд. «The Exclusive-OR function» (CC BY) — у XOR нет прямого эквивалента среди булевых операций, символ ⊕ редко используют в выражениях, потому что тождества и правила упрощения к нему не применяются; запись через И и ИЛИ: AB' + A'B; любое выражение такого вида можно заменить одним элементом XOR
  3. Microchip. ATmega48A/PA/88A/PA/168A/PA/328/P Data Sheet Complete (DS40002061B, 2020), разд. 14.2.2 «Toggling the Pin» — запись логической единицы в PINxn переключает значение PORTxn независимо от DDRxn

Нашли ошибку?