Исключающее ИЛИ (XOR)
Мы уже знаем про вентиль ИЛИ (OR), который выдаёт единицу, если включён хотя бы один из входов. Но в математике и программировании часто нужна более строгая логика: выбор «или то, или другое, но не оба сразу». Для этого существует вентиль Исключающее ИЛИ — XOR (eXclusive OR).
Представь, что мама сказала: «Ты можешь съесть либо мороженое, либо шоколадку». Если ты съешь что-то одно — ты молодец (результат 1). Если откажешься от всего — это странно (результат 0). А если слопаешь и мороженое, и шоколадку — условие нарушено (результат 0).
Именно так работает XOR: он выдаёт 1 только тогда, когда сигналы на его входах разные — один равен 1, а другой 0. Если на входах одинаковые сигналы (две единицы или два нуля), XOR выдаёт 0.
Таблица истинности XOR
| A | B | A XOR B | Трактовка |
|---|---|---|---|
| 0 | 0 | 0 | Входы одинаковые |
| 0 | 1 | 1 | Входы разные |
| 1 | 0 | 1 | Входы разные |
| 1 | 1 | 0 | Входы одинаковые |
XOR — это детектор различий: он отвечает на вопрос «эти два бита разные?». Да — единица, нет — ноль. Ни AND, ни OR так не умеют: OR зажигается даже когда оба входа равны 1, а AND не отличает 01 от 10.
Формула XOR
XOR можно выразить через уже знакомые вентили:
XOR(A, B) = (A ИЛИ B) И НЕ (A И B)
Прочитаем формулу словами: «или A, или B, но не оба сразу». Сначала ИЛИ проверяет, что единица есть хотя бы на одном входе, затем И + НЕ проверяют, что единиц не две. Оба условия должны выполниться — для этого они и соединены через И.
В игре на уровне 1.5 ты соберёшь XOR именно так — из вентилей ИЛИ, НЕ-И (NAND) и И.
XOR как управляемый инвертор
У XOR есть удивительное свойство: он может «переключать» сигнал. Пусть A — это данные, а B — управляющий сигнал. Разберём на числах при A = 1:
• B = 0: XOR(1, 0) = 1 — данные прошли без изменений.
• B = 1: XOR(1, 1) = 0 — данные перевернулись.
Получается «управляемый инвертор»: пока управление равно 0, сигнал идёт как есть; как только управление становится 1, каждый бит переворачивается. Именно так работают простейшие аппаратные шифраторы: наложили ключ через XOR — данные зашифрованы, наложили тот же ключ ещё раз — расшифрованы обратно, ведь XOR(XOR(A, K), K) = A.
XOR и сложение: бит суммы
Самое важное применение XOR — двоичная арифметика. Сложим два бита: 0+0=0, 0+1=1, 1+0=1, а вот 1+1 в двоичной системе — это 10: ноль пишем, единица «в уме». Смотри, что выдаёт XOR: 0, 1, 1, 0 — это ровно бит суммы! А перенос (единица «в уме») — это результат AND: только при 1+1.
Именно поэтому полусумматор на уровне 1.6 устроен так: Sum = A XOR B, Carry = A AND B. С этого вентиля начинается вся арифметика процессора.
Частые ошибки
• Забывать, что XOR выдаёт 0 на входах 11 — в этом его отличие от OR.
• Путать управляемый инвертор: при управлении 1 данные переворачиваются, а не остаются как есть.
Резюме
1. XOR выдаёт 1 только когда входы разные: 01 → 1, 10 → 1, а 00 и 11 → 0.
2. Формула XOR: (A OR B) AND NOT(A AND B) — «или то, или другое, но не оба».
3. XOR — управляемый инвертор: управление 0 пропускает данные, управление 1 переворачивает.
4. Наложив ключ через XOR дважды, получаешь исходные данные — так работает простое шифрование.
5. Бит суммы в полусумматоре — это A XOR B, а перенос — A AND B.
На уровне 1.5 тебе предстоит собрать вентиль XOR из уже готовых ИЛИ, НЕ-И и И — и увидеть, как «строгий выбор» рождается из простых правил. Если захочешь разобраться, почему из NAND можно собрать всё что угодно, загляни в законы де Моргана, а про двоичное сложение подробнее читай в двоичной математике.