Шинное исключающее ИЛИ (BusXOR)
Входы (Inputs)
| Пин | Тип | Описание |
|---|---|---|
| A | bus8 | Первая шина |
| B | bus8 | Вторая шина |
Выходы (Outputs)
| Пин | Тип | Описание |
|---|---|---|
| Q | bus8 | A ^ B (побитовое XOR) |
Логика работы
BusXOR — детектор различий. Он сравнивает две шины бит за битом и ставит единицу там, где биты не совпали: 0 против 1 или 1 против 0. Совпали — ноль. Таблица получается своенравная: 0 XOR 0 = 0, 0 XOR 1 = 1, 1 XOR 0 = 1, но 1 XOR 1 = 0. Если И и ИЛИ отвечают на вопрос «есть ли единицы», то XOR — на вопрос «есть ли разница».
Из правила «различие даёт единицу» следуют два главных свойства. Первое: A XOR A = 00000000 — сравнение байта с самим собой всегда даёт ноль. Второе: XOR с маской 11111111 переворачивает все биты: 10101010 XOR 11111111 = 01010101, то есть X XOR 11111111 = NOT X. Маску можно сузить: XOR с 00001111 инвертирует только младшую тетраду, не трогая старшую.
Тонкость: XOR обратим сам в себя. Зашифруй байт ключом K — получишь C = A XOR K. Примени тот же ключ снова — A вернётся без потерь: C XOR K = A. Ни И, ни ИЛИ таким свойством не обладают, и именно поэтому XOR — основа простейших шифров и контрольных сумм.
Примеры (8 бит)
| A (bin) | B (bin) | Q (bin) | Q (dec) |
|---|---|---|---|
| 10101010 | 11111111 | 01010101 | 85 |
| 11001100 | 11001100 | 00000000 | 0 |
| 00001111 | 11110000 | 11111111 | 255 |
| 10110110 | 00001111 | 10111001 | 185 |
Применение
В АЛУ (уровень 13) XOR входит в базовую четвёрку операций. Но настоящая слава приходит к нему в связке с детектором нуля: прогнав A XOR B через BusZero, процессор получает готовый компаратор — единица на выходе означает, что два байта равны. На этом строится команда сравнения и все условные переходы «если равно».
В проекте компьютера (уровень 16 и дальше) XOR переключает биты: приложил к регистру маску 00000001 — младший бит мигнул, приложил ещё раз — погас обратно. Тем же свойством пользуется простое шифрование: значение XOR-ится с ключом и хранится «взболтанным», а при чтении второй XOR с тем же ключом восстанавливает оригинал. На XOR строятся и контрольные суммы: последовательный XOR всех байтов сообщения мгновенно покажет, не потерялся ли по дороге хоть один бит.
Смежные компоненты
Статьи по теме
Частые вопросы
Зачем нужно побитовое XOR?
Для сравнения, шифрования и переключения битов. XOR числа с самим собой всегда даёт 0.
Как сравнить два байта на равенство?
Подай их на входы A и B, а результат — на BusZero. Если байты равны, XOR даст 00000000, и на выходе будет 1. Любое различие хоть в одном бите даст 0.
Почему XOR называют переключателем битов?
Единицы маски переворачивают выбранные биты, нули оставляют на месте. Применишь маску дважды — биты вернутся: 1 XOR 1 = 0. Идеально для toggle-операций вроде мигания светодиода.