Можно ли определить все побитовые операторы, используя «побитовый nand», подобно тому, как вся логическая логика может быть построена, используя просто «булевский nand»?

9

Nand известен как «универсальный» логический элемент, потому что он позволяет вам определять все другие логические логические элементы:

not(x) = nand(x,x)
and(x, y) = not(nand(x, y))
or(x, y) = nand(not(x), not(y))
nor(x, y) = not(or(x, y))
xor(x, y) = nand(nand(a, nand(a, b)), nand(b, nand(a, b)))

Это называется nand-logic и обычно используется в современных компьютерах, потому что транзистор может работать так же, как nand-gate.

Мне интересно, возможно ли сделать что-то подобное с побитовыми операциями. Может ли , например , побитовое NAND (bnand) используется для определения bnot, bor, band, bnor, bxor? Есть ли универсальная побитовая операция?

Qqwy
источник

Ответы:

13

На аппаратном уровне нет разницы между побитовым и логическим. Так да. Логическая операция - это просто побитовая операция с одним битом.

Мартин Маат
источник
2

На большинстве современных микропроцессоров побитовые операции реализованы изначально, поэтому нет никакой пользы от операции NAND.

Например, набор команд x86 имеет: AND , OR , XOR , NOT . Насколько я знаю, все они выполняются за один цикл, поэтому замена их несколькими операциями NAND не принесет никакой пользы. Он также имеет ANDN, который является эквивалентом, ((NOT x) AND y)который может быть сгенерирован умным оптимизационным компилятором для получения цикла.

Движение RISC попыталось продвинуть сокращенный набор команд для более простой и производительной архитектуры. Идея заключалась в том, что компиляторы должны будут объединять более простые и быстрые инструкции. Тем не менее, похоже, что помимо некоторых экспериментальных или обучающих процессоров, большинство обеспечивают как NAND, так и обычные побитовые операции (например, PowerPC или ARM ).

Christophe
источник
Я искренне не уверен, как булевы операторы реализованы в процессорах в наши дни, но раньше было довольно распространенным использовать мультиплексирование 4 к 1, подавая «таблицу истинности» в качестве 4 входов, а затем использовать эти два бита для работать в качестве селектора для выхода. Дает вам единственную схему, которую можно использовать для всех 16 булевых функций с двумя операндами.
Ватин
2
Тот факт, что OR, XOR и NOT реализованы «изначально» и занимают не более одного такта, ничего не говорит о том, построены ли они с использованием только схем NAND или нет. Я подозреваю, что в наши дни они построены с использованием только NAND, потому что транзисторы действительно дешевые и очень быстрые. Метод Ватина 4 к 1 оптимизирован для использования небольшого количества транзисторов, что бессмысленно в эпоху нанометров.
Мартин Маат
РИСК со временем стал бессмысленным. Когда оно появилось, типичные сложные инструкции занимали несколько тактов, например, 10 или около того. И это не касалось ИЛИ / И / НЕ, они уже были быстрыми и считались «простыми» и существенными для любого ЦП, поэтому они, безусловно, не будут сброшены процессором RISC. Сегодня сложные инструкции занимают меньше такта (из-за конвейеризации и многопоточности / многоядерности.
Martin Maat