すべてのブールロジックを「ブールナンド」だけを使用して構築する方法と同様に、「ビットワイズナンド」を使用してすべてのビットワイズ演算子を定義することは可能ですか?


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)を定義するために使用することはbnotborbandbnorbxor?汎用的なビット単位の操作はありますか?

回答:


13

ハードウェアレベルでは、ビット単位と論理の違いはありません。あ、はい。論理演算は、単一ビットに対するビット演算です。


2

最近のほとんどのマイクロプロセッサでは、ビット単位の演算がネイティブに実装されているため、NAND演算を実行するメリットはありません。

たとえば、x86命令セットには、ANDORXORNOTがあります。これらはすべて、私の知る限り1つのサイクルで実行されるため、いくつかのNAND演算に置き換えてもメリットはありません。また、巧妙な最適化コンパイラーが生成してサイクルを取得するのと同等のANDNもあり((NOT x) AND y)ます。

RISCの動きが単純よりパフォーマンスアーキテクチャの縮小命令セットを促進することを試みました。その考えは、コンパイラーがより単純でより高速な命令を組み合わせる必要があるというものでした。ただし、一部の実験用プロセッサまたは教育用プロセッサを除いて、ほとんどがネイティブのNANDと通常のビット単位の演算(PowerPCARMなど)を提供しているようです。


最近のブール演算子がCPUにどのように実装されているかは本当にわかりませんが、4対1のマルチプレクサを使用して「真理値表」を4つの入力として入力し、2つのビットを使用して出力のセレクタとして機能します。16個の2オペランドのブール関数すべてに使用できる単一の回路を提供します。
Vatine 2016

2
OR、XOR、NOTは「ネイティブに」実装されており、1クロックサイクルしかかからないという事実は、それらがNAND回路のみを使用して構築されているのか、それとも使用されていないのかについては何も述べていません。トランジスタは本当に安くて速いので、NANDだけを使ってビルドされているのではないかと思います。Vatineの4-to-1メソッドは、ナノメーター時代には無意味な少数のトランジスタを使用するために最適化されています。
Martin Maat

RISCは時間の経過とともに無意味になりました。それが出現したとき、典型的な複雑な命令は、10程度のような複数のクロックサイクルを要しました。そして、これはOR / AND / NOTに関するものではありませんでした。これらはすでに高速であり、「シンプル」であり、どのCPUにとっても不可欠であると考えられているため、RISCプロセッサによって確実に削除されません。今日、複雑な命令はクロックサイクルよりも短い時間しかかかりません(パイプライン処理とマルチスレッド化/マルチコアのため)
Martin Maat
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.