Исключающее ИЛИ (XOR)
Исключающее ИЛИ даёт единицу, когда входы различны, и ноль, когда они одинаковы. Эта операция не укладывается в обычные правила булевой алгебры, но без неё не обходятся ни сумматор, ни бит чётности, ни CRC, ни переключение бита в регистре.
Обновлено Редакция GAW
Исключающее ИЛИ (exclusive OR, XOR) — логическая операция и логический элемент, выход которого равен 1, когда входы различны, и 0, когда они одинаковы. Обозначается ⊕. Инверсия XOR — исключающее ИЛИ-НЕ (XNOR) — даёт 1 при одинаковых входах и служит детектором равенства.
| A | B | A ⊕ B |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
Место в булевой алгебре
Kuphaldt подчёркивает: у XOR нет прямого эквивалента среди операций булевой алгебры — сложения, умножения и дополнения, и привычные тождества к символу ⊕ не применяются. Поэтому его записывают через И и ИЛИ:
Любое выражение такого вида — два элемента И и один ИЛИ — заменяется одним элементом 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, и выход И становится нулём.
Источники
- 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, высокий уровень при одинаковых входах
- 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
- Microchip. ATmega48A/PA/88A/PA/168A/PA/328/P Data Sheet Complete (DS40002061B, 2020), разд. 14.2.2 «Toggling the Pin» — запись логической единицы в PINxn переключает значение PORTxn независимо от DDRxn
Нашли ошибку?
Смотрите также
- Логический элемент (вентиль)Схема, выход которой — булева функция входов: НЕ, И, ИЛИ и их варианты
- Булева алгебраАлгебра двух значений: И, ИЛИ, НЕ и правила упрощения
- Бит чётностиParity: контроль чётности символа UART, even и odd
- CRCЦиклический избыточный код для обнаружения ошибок
- Битовые маскиПоле регистра: маска, сдвиг, чтение и запись, код на C
- Симулятор логических схемВентили и выражения, таблица всех узлов, карта Карно, минимизация, И-НЕ