ビット演算NOR計算機とは?
このツールは、2つの整数のビット単位NORを \(\text{result} = \sim(\text{A} \mathbin{|} \text{B})\) という式で計算します。NOR(「NOT OR」)は基本的な論理演算のひとつで、まず対応する各ビットのペアにOR演算を行い、その結果を反転させます。出力ビットが1になるのは、両方の入力ビットが0のときだけです。NORは「完全性(functional complete)」を持つ演算で、他のすべての論理ゲートをNORゲートだけで構成できます。これが、デジタル回路においてNORがとても重要とされる理由です。
使い方
2つの整数(AとB)を入力し、ビット幅(8/16/32/64ビット)を選びます。計算機は、そのビット幅における符号なしの値として解釈したNORの結果を返し、途中経過であるORの値と2進数表現もあわせて表示します。小さいビット幅を選ぶと、上位ビットがマスクされて切り捨てられるだけなので、固定幅レジスタの動作を再現したいときに便利です。
計算式の解説
2つのビットのORは、どちらか一方でも1なら1になります。NORはそれを反転させるため、各ビットは次の真理値表に従います。0 NOR 0 = 1、0 NOR 1 = 0、1 NOR 0 = 0、1 NOR 1 = 0。生の反転(~)はすべての上位ビットを1にしてしまうため、結果を $$\text{NOR} = \sim\left(\text{A} \mathbin{|} \text{B}\right) \mathbin{\&} \left(2^{\text{Bits}} - 1\right)$$ でマスクして、選択した符号なしビット幅の範囲内に収めます。
計算例
A = 12(2進数で1100)、B = 10(2進数で1010)を8ビット幅で計算してみましょう。\(\text{A} \mathbin{|} \text{B} = 1110 = 14\) です。これを8ビット内で反転すると \(11110001 = 241\) になります。したがって、8ビット幅では \(12 \text{ NOR } 10 = \mathbf{241}\) です。
NOR真理値表とビット幅マスク
ビット単位NOR演算は、2つのオペランドをビット単位で組み合わせます。ビットの各ペアについて、まずORを計算し、その結果を反転します。言い換えれば、出力ビットは両方の入力ビットが0の場合にのみ1になります。その他のすべての場合、出力ビットは0です。これはORの否定であるため、NOR(NOT-OR)と呼ばれます。
| A | B | A | B | NOR = ~(A | B) |
|---|---|---|---|
| 0 | 0 | 0 | 1 |
| 0 | 1 | 1 | 0 |
| 1 | 0 | 1 | 0 |
| 1 | 1 | 1 | 0 |
NOT段階がすべてのビットを反転するため、結果は選択されたビット幅に依存します。オペランドをOR処理して反転した後、値は\(2^{n}-1\)を使用して幅\(n\)にマスクされ、最下位\(n\)ビットのみが残ります。サポートされている各幅のマスクは以下に示されています。
| ビット幅\(n\) | マスク\(2^{n}-1\)(10進数) | 最大符号なし値 |
|---|---|---|
| 8 | 255 | 255 |
| 16 | 65535 | 65535 |
| 32 | 4294967295 | 4294967295 |
| 64 | 18446744073709551615 | 18446744073709551615 |
例えば、8ビット幅で\(A = 12\)、\(B = 10\)の場合:\(12 | 10 = 14\)、そして\(\sim 14\)を8ビットにマスクすると241が得られます。中間のOR結果\(12 | 10 = \)14は独立して確認できます。
主要用語
- ビット単位NOR
- 両方のオペランドの対応するビットが両方とも0の場合にのみすべてのビットが1になる結果を生成する演算です。これはOR結果の反転として定義されます:\(\text{NOR} = \sim(A | B)\)。
- OR(ビット単位)
- 2つの対応する入力ビットのうち少なくとも1つが1の場合は各結果ビットを1に設定し、両方が0の場合のみ0に設定する演算です。
- NOT / 反転(~)
- すべてのビットを反転する単項演算です:各0は1になり、各1は0になります。NORでは、OR結果に適用され、その効果は選択されたビット幅によって制限されます。
- ビット幅
- 値を表すために使用されるビット数(ここでは8、16、32、または64)です。反転結果が保持するビット数を決定し、したがって出力の数値範囲を決定します。
- マスキング
- \(2^{n}-1\)などの値とのビット単位ANDを使用して、最下位\(n\)ビットのみを保持し、より高いビットを破棄します。これはNOR結果を選択された幅に限定します。
- 符号なし整数
- 符号ビットなしの整数表現であり、すべてのビットパターンが0から\(2^{n}-1\)までの非負の値を表します。NOR結果は符号なし値として報告されます。
- 関数的に完全な(ユニバーサル)ゲート
- それ自体のコピーのみを使用して、任意のブール関数を構築できるゲートです。NORは関数的に完全です:AND、OR、およびNOTはすべてNORゲートのみから構成できるため、ユニバーサルゲートと呼ばれます。
よくある質問
なぜビット幅によって結果が変わるのですか? 反転はすべてのビットを反転させるため、先頭に並ぶ1の数は、その数値を何ビットで表現するかによって変わります。ビット幅が広いほど、符号なしの結果は大きくなります。
負の数は使えますか? 入力は整数として扱われます。きれいな結果を得るには、選択したビット幅の範囲内にある0以上の整数を使ってください。
NORはNANDと同じですか? いいえ。NANDは \(\sim(\text{A} \mathbin{\&} \text{B})\)(NOT AND)、NORは \(\sim(\text{A} \mathbin{|} \text{B})\)(NOT OR)です。どちらも万能ゲートですが、出力は異なります。