5 / 63 · Теория
XOR и XNOR: равенство, различие и чётность
Различайте двухвходовый XOR и многовходовую чётность и объясняйте ограничения обнаружения ошибок.
Уроки доступны бесплатно. Запишитесь, чтобы сохранять прогресс.
Элемент, определяющий различие двух битов
XOR равен 1, если два входа различны, XNOR — если одинаковы.
OR и XOR совпадают при 00, 01 и 10, но различаются при 11. В обозначении XOR перед OR добавлена ещё одна кривая. У XNOR также есть кружок инверсииИнверсия — операция NOT, меняющая 0 на 1 и 1 на 0. Черта над формулой означает применение NOT ко всему выражению под ней. Подробнее на выходе.
| a | b | y |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
Для трёх и более входов это уже не «ровно один»
XOR ассоциативен, поэтому можно вычислять последовательно. Результат равен 1 при нечётном числе единиц на входах. При 111 тоже получается 1, поэтому обобщение «ровно один вход равен 1» неверно.
Выход sum полного сумматора — эта трёхвходовая чётностьЧётность указывает, чётно или нечётно число единичных битов. Проверка чётности обнаруживает ошибки в нечётном числе битов, но может пропустить ошибки в чётном числе., а cout показывает, есть ли минимум две единицы. Задайте ниже 111: sum=1, cout=1, целочисленная сумма .
a + b + cin = sum + 2 × cout
Чётность обнаруживает определённые классы ошибок
Для данных бит чётного паритета . XOR всех данных вместе с p равен 0. Если при передаче инвертируется нечётное число битов, общий XOR станет 1, обнаружив ошибку. Чётное число инверсий может остаться незамеченным; один бит паритета также не позволяет определить место ошибки.
Проверка равенства битовых строк
Равенство векторов A и B можно проверить, объединив побитовые XOR через OR:
При хотя бы одном несовпадении OR равен 1. Инверсия всего результата даёт 1 лишь при совпадении всех битов. Реализация «все результаты XOR ещё раз соединить через XOR» ошибочна: два несовпадения взаимно погашаются.
Попробуйте сами
Найдите A XOR B и результат проверки равенства при A=1010, B=1001. Что пойдёт не так, если определять равенство свёрткой полученной битовой строки через XOR?
Прочитать объяснение
XOR даёт 0011, равенство — 0. Два несовпадения при XOR-свёртке взаимно погашаются до 0, а инверсия ошибочно даст равенство=1. Биты несовпадения нужно свёртывать через OR.