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

Мы уже знаем про вентиль ИЛИ (OR), который выдаёт единицу, если включён хотя бы один из входов. Но в математике и программировании часто нужна более строгая логика: выбор «или то, или другое, но не оба сразу». Для этого существует вентиль Исключающее ИЛИ — XOR (eXclusive OR).

Решение уровня XOR: исключающее ИЛИ из базовых вентилей
Вентиль XOR: авторское решение уровня

Представь, что мама сказала: «Ты можешь съесть либо мороженое, либо шоколадку». Если ты съешь что-то одно — ты молодец (результат 1). Если откажешься от всего — это странно (результат 0). А если слопаешь и мороженое, и шоколадку — условие нарушено (результат 0).

Именно так работает XOR: он выдаёт 1 только тогда, когда сигналы на его входах разные — один равен 1, а другой 0. Если на входах одинаковые сигналы (две единицы или два нуля), XOR выдаёт 0.

Таблица истинности XOR

ABA XOR BТрактовка
000Входы одинаковые
011Входы разные
101Входы разные
110Входы одинаковые

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 можно собрать всё что угодно, загляни в законы де Моргана, а про двоичное сложение подробнее читай в двоичной математике.

Попробовать в симуляторе →