什麼是位元 NOR 運算計算機?
這個工具會使用公式 \(\text{result} = \sim(\text{A} \mathbin{|} \text{B})\) 計算兩個整數的位元 NOR 運算。NOR(即「NOT OR」,反或閘)是一種基本的邏輯運算:它會先對每一對對應的位元執行 OR(或)運算,再將結果取反。只有當兩個輸入位元都為 0 時,輸出位元才會是 1。NOR 具備「功能完備性」——任何其他邏輯閘都可以單獨用 NOR 閘組合而成,這正是它在數位電子領域如此重要的原因。
如何使用
輸入兩個整數(A 與 B),再選擇位元寬度(8、16、32 或 64 位元)。計算機會回傳在該寬度下以無號值(unsigned)解讀的 NOR 結果,同時顯示中間的 OR 運算值以及二進位表示法。選擇較小的位元寬度只是將較高的位元遮罩(mask)掉,在模擬固定寬度暫存器時相當實用。
公式說明
兩個位元做 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)$$
實例演算
假設在 8 位元寬度下,A = 12(二進位 1100),B = 10(二進位 1010)。\(\text{A} \mathbin{|} \text{B} = 1110 = 14\)。在 8 位元範圍內取反後得到 \(11110001 = 241\)。因此在 8 位元寬度下,\(12 \text{ NOR } 10 = \mathbf{241}\)。
NOR 真值表和位寬遮罩
按位 NOR 運算將兩個運算數逐位組合。對於每一對位,它首先計算 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 運算數並反轉後,該值被遮罩到寬度 \(n\) 使用 \(2^{n}-1\),以便僅保留最低的 \(n\) 位。下面顯示了每個支持寬度的遮罩。
| 位寬 \(n\) | 遮罩 \(2^{n}-1\)(十進位) | 最大無符號值 |
|---|---|---|
| 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(按位)
- 如果兩個對應的輸入位中至少有一個是 1,則將每個結果位設置為 1;如果兩個都是 0,則設置為 0 的運算。
- NOT / 反轉 (~)
- 翻轉每一位的一元運算:每個 0 變為 1,每個 1 變為 0。在 NOR 中,它應用於 OR 結果,其效果受所選位寬的限制。
- 位寬
- 用於表示值的位數(此處為 8、16、32 或 64)。它決定了反轉結果保留多少位,因此決定了輸出的數值範圍。
- 遮罩
- 使用按位 AND 與像 \(2^{n}-1\) 這樣的值一起,僅保留最低的 \(n\) 位並丟棄更高的位。這將 NOR 結果限制在所選寬度內。
- 無符號整數
- 沒有符號位的整數表示,因此所有位模式表示從 0 到 \(2^{n}-1\) 的非負值。NOR 結果報告為無符號值。
- 函數完整(通用)閘門
- 可以使用其自身的複製構建任何布林函數的閘門。NOR 在函數上是完整的:AND、OR 和 NOT 都可以從 NOR 閘門單獨構建,這就是為什麼它被稱為通用閘門。
常見問題
為什麼結果會隨位元寬度而改變?取反運算會翻轉每一個位元,因此前導的那些 1 會取決於用多少位元來表示該數字。寬度越大,得到的無號結果就越大。
可以使用負數嗎?輸入會被當作整數處理;若想得到乾淨明確的結果,建議使用所選寬度範圍內的非負整數。
NOR 和 NAND 一樣嗎?不一樣。NAND 是 \(\sim(\text{A} \mathbin{\&} \text{B})\)(反及閘,NOT AND),而 NOR 是 \(\sim(\text{A} \mathbin{|} \text{B})\)(反或閘,NOT OR)。兩者都是萬用邏輯閘,但會產生不同的輸出。