Ist es möglich, alle bitweisen Operatoren mit einem 'bitweisen nand' zu definieren, ähnlich wie die gesamte boolesche Logik nur mit 'booleschem nand' erstellt werden kann?

9

Nand wird als "universelles" Logikgatter bezeichnet, da Sie damit alle anderen booleschen Logikgatter definieren können:

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)))

Dies ist als Nand-Logik bekannt und wird üblicherweise in modernen Computern verwendet, da ein Transistor so hergestellt werden kann, dass er sich wie ein Nand-Gate verhält.

Ich frage mich, ob es möglich ist, mit den bitweisen Operationen etwas Ähnliches zu tun. Kann ein zB bitweise nand (bnand) verwendet werden , um zu definieren bnot, bor, band, bnor, bxor? Gibt es eine universelle bitweise Operation?

Qqwy
quelle

Antworten:

13

Auf Hardwareebene gibt es keinen Unterschied zwischen bitweise und logisch. Also ja. Eine logische Operation ist nur eine bitweise Operation für ein einzelnes Bit.

Martin Maat
quelle
2

Auf den meisten modernen Mikroprozessoren werden die bitweisen Operationen nativ implementiert, so dass eine NAND-Operation keinen Vorteil hat.

Zum Beispiel hat der x86-Befehlssatz: AND , OR , XOR , NOT . Diese werden meines Wissens alle in einem einzigen Zyklus ausgeführt, so dass es keinen Vorteil hätte, sie durch mehrere NAND-Operationen zu ersetzen. Es hat auch ANDN, was einem Äquivalent entspricht ((NOT x) AND y), das von einem cleveren Optimierungs-Compiler generiert werden könnte, um einen Zyklus zu erhalten.

Die RISC- Bewegung versuchte, einen reduzierten Befehlssatz für eine einfachere und leistungsfähigere Architektur zu fördern. Die Idee war, dass Compiler einfachere und schnellere Anweisungen kombinieren müssen. Es scheint jedoch, dass abgesehen von einigen experimentellen oder unterrichtenden Prozessoren die meisten nativ NAND sowie die üblichen bitweisen Operationen (z. B. PowerPC oder ARM ) bereitstellen .

Christophe
quelle
Ich bin mir wirklich nicht sicher, wie Boolesche Operatoren heutzutage in CPUs implementiert sind, aber es war ziemlich üblich, einen 4-zu-1-Mux zu verwenden, der "die Wahrheitstabelle" als 4 Eingänge einspeist und dann die zwei Bits verwendet arbeiten als Wahlschalter für den Ausgang. Gibt Ihnen eine einzelne Schaltung, die für alle 16 booleschen Funktionen mit zwei Operanden verwendet werden kann.
Vatine
2
Die Tatsache, dass OR, XOR und NOT "nativ" implementiert sind und nicht mehr als einen einzelnen Taktzyklus benötigen, sagt nichts darüber aus, ob sie nur mit NAND-Schaltungen oder nicht erstellt werden. Ich vermute, dass sie heutzutage nur mit NANDs gebaut werden, weil Transistoren sehr billig und sehr schnell sind. Die 4-zu-1-Methode von Vatine ist für die Verwendung einer kleinen Anzahl von Transistoren optimiert, was im Nanometer-Zeitalter sinnlos ist.
Martin Maat
RISC wurde mit der Zeit bedeutungslos gemacht. Als es auftauchte, brauchten typische komplexe Befehle mehrere Taktzyklen, wie etwa 10. Und hier ging es nicht um ODER / UND / NICHT, diese waren bereits schnell und wurden als "einfach" und für jede CPU als wesentlich angesehen, sodass sie sicherlich nicht von einem RISC-Prozessor gelöscht werden würden. Heutzutage benötigen komplexe Anweisungen weniger als einen Taktzyklus (aufgrund von Pipelining und Multithreading / Multi-Core).
Martin Maat