Шинное НЕ (BusNOT)

Входы (Inputs)

ПинТипОписание
Abus8Входная шина

Выходы (Outputs)

ПинТипОписание
Qbus8~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)
000011111511110000240
00000000011111111255
101010101700101010185
11111111255000000000

Применение

В АЛУ (уровень 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.