Шинное НЕ (BusNOT)
Входы (Inputs)
| Пин | Тип | Описание |
|---|---|---|
| A | bus8 | Входная шина |
Выходы (Outputs)
| Пин | Тип | Описание |
|---|---|---|
| Q | bus8 | ~A (побитовое НЕ), т.е. 255−A |
Логика работы
BusNOT — самый простой шинный узел: у него один вход, и он переворачивает каждый из восьми битов на противоположный. Ноль становится единицей, единица — нулём. Представь фотографию и её негатив: где было светло — стало темно, и наоборот. Пример на байте: 00001111 (15) превращается в 11110000 (240) — все восемь позиций перевернулись одновременно.
Из-за побитного переворота результат называют дополнением до 1: в каждой паре «бит A и бит Q» ровно одна единица, поэтому A + Q = 11111111, то есть Q = 255 − A. Проверь: 15 + 240 = 255. Это не красивость, а рабочий инструмент — узел мгновенно отвечает на вопрос «сколько не хватает до максимума».
Тонкость: в дополнительном коде знак минус записывается не простой инверсией, а инверсией плюс единица: −x = NOT(x) + 1. Сам по себе NOT(x) равен −x − 1, а не −x. Ещё одно следствие симметрии: двойная инверсия возвращает исходное число — NOT(NOT(A)) = A, как негатив, снятый с негатива.
Примеры (8 бит)
| A (bin) | A (dec) | Q (bin) | Q (dec) |
|---|---|---|---|
| 00001111 | 15 | 11110000 | 240 |
| 00000000 | 0 | 11111111 | 255 |
| 10101010 | 170 | 01010101 | 85 |
| 11111111 | 255 | 00000000 | 0 |
Применение
В АЛУ (уровень 13) BusNOT стоит в паре с сумматором и превращает сложение в вычитание. Схема A − B собирается как A + NOT(B) + 1: инвертируем вычитаемое, прибавляем единицу через вход переноса сумматора — и получаем точную разность без отдельного узла вычитания. Так процессор выполняет команду SUB почти бесплатно, переиспользуя уже готовый сумматор.
В Harvard-архитектуре (уровень 16) инверсия нужна при работе с отрицательными числами: чтобы получить −5, процессор инвертирует 00000101, получает 11111010, добавляет единицу — и в регистре лежит 11111011, то есть −5 в дополнительном коде. Пригодится BusNOT и для масок: инвертировав маску, ты одним движением превращаешь операцию «выделить эти биты» в «стереть эти биты» — И с инверсной маской очищает ровно те разряды, которые раньше защищал.
Смежные компоненты
Статьи по теме
Частые вопросы
Что делает побитовое НЕ?
Инвертирует каждый бит шины: 0 становится 1 и наоборот. Это дополнение числа до 255.
Как получить минус единицу на шине?
Инвертируй ноль: NOT(00000000) = 11111111. В дополнительном коде 11111111 — это ровно −1, готовое значение, чтобы уменьшить счётчик на единицу.
Почему NOT(A) равен 255 − A?
Каждая пара битов «вход и выход» содержит ровно одну единицу, поэтому A и NOT(A) вместе дают 11111111 = 255. Например, 00001111 (15) + 11110000 (240) = 255.