什麼是二進位減法計算機?
這個工具能將一個二進位(base-2)數減去另一個二進位數,並同時以二進位與十進位顯示答案。二進位只使用 0 和 1 兩個數字,每一個位置都代表 2 的次方。用手算二進位減法時必須在各個位數之間「借位」,過程繁瑣又容易出錯——這個計算機可以瞬間完成運算,並透過十進位算術驗證結果是否正確。
使用方法
輸入第一個二進位數(被減數)與第二個二進位數(減數),只能使用 0 與 1。按下計算後,即可看到二進位的差,以及每個輸入值與結果的十進位數值。如果第二個數較大,結果會以負的二進位數呈現(前面加上負號)。
公式說明
最簡單也最可靠的做法,是先把每個二進位字串轉換成十進位整數,進行一般的減法運算,再把差轉回二進位:
$$\text{result} = \text{toBinary}\left( \text{parseBinary}(a) - \text{parseBinary}(b) \right)$$
舉例來說,二進位數 1010 等於 \(1\cdot 8 + 0\cdot 4 + 1\cdot 2 + 0\cdot 1 = 10\)(十進位)。這種方法避開了手動借位的麻煩,卻能得到完全相同的結果。
實際範例
用 1010 減去 11。先進行轉換:\(1010_2 = 10_{10}\),\(11_2 = 3_{10}\)。接著 \(10 - 3 = 7\)。再把 7 轉回二進位得到 \(111_2\)。因此 \(1010 - 11 = \mathbf{111}\)。
如何手動進行二進制減法(借位法)
直接二進制減法的原理與十進制減法相同,但在二進制中,每一列只能是 0 或 1。關鍵概念是借位:當你必須從 0 中減去 1 時,你從左邊的下一列借 1,將當前列變成 \(10_2\)(十進制中是 2),所以 \(10_2 - 1_2 = 1_2\)。
- 在右側對齐數字。將較大的值(被減數)寫在上面,較小的值(減數)寫在下面,使最低有效位對齐。用前導零填充較短的數字,使兩者寬度相同。
- 從右到左,一次一列進行計算。在每一列中計算上方位減下方位。
- 應用列規則:\(0-0=0\)、\(1-0=1\)、\(1-1=0\),以及 \(0-1\) 需要借位。
- 借位規則:對於 \(0-1\),從左邊的下一列借 1。當前列變成 \(10_2 - 1 = 1\),而被借出的列減少 1(如果該列本身是 0,你必須再次借位,向左級聯)。
- 讀取結果,從下面一行讀取,去掉任何前導零。
計算示例:\(1010_2 - 0011_2\)。兩個都填充為四位。十進制檢驗:\(10 - 3\)。
- 第 0 列(最右邊):上方 0,下方 1 → \(0-1\) 需要借位。從第 1 列借 1,得到 \(10_2 - 1 = 1\)。結果位 = 1。第 1 列的上方位從 1 降至 0。
- 第 1 列:借出後,上方是 0,下方是 1 → \(0-1\) 需要借位。從第 2 列借 1,得到 \(10_2 - 1 = 1\)。結果位 = 1。第 2 列的上方位從 0... 它是 0,所以借位級聯到第 3 列,使第 2 列讀作 \(10_2\) 然後借出 1 留下 1。
- 第 2 列:在級聯借位後它保有 1,下方是 0 → \(1-0=0\)。結果位 = 0。
- 第 3 列:上方原為 1,但它借給第 2 列 1,留下 0;下方是 0 → \(0-0=0\)。結果位 = 0。
從下到上按列讀取得到 \(0111_2\),即 111\(_2\),等於十進制的 \(7\) — 與 \(10 - 3 = 7\) 相符。
更多計算示例
每個示例都顯示二進制減法及其十進制等價,以便您可以驗證算術。
| 二進制減法 | 十進制檢驗 | 結果(二進制) | 結果(十進制) |
|---|---|---|---|
| \(1101_2 - 101_2\) | \(13 - 5\) | 1000\(_2\) | 8 |
| \(11_2 - 1010_2\) | \(3 - 10\) | \(-111_2\) | \(-7\) |
| \(110_2 - 110_2\) | \(6 - 6\) | \(0_2\) | 0 |
示例 1 — \(1101_2 - 101_2\)。將減數填充為 \(0101_2\)。從右到左逐列計算:\(1-1=0\);\(0-0=0\);\(1-1=0\);\(1-0=1\)。得到 \(1000_2 = 8\),確認 \(13 - 5 = 8\)。
示例 2 — \(11_2 - 1010_2\)(負結果)。此處減數(\(10\))大於被減數(\(3\)),所以答案是負數。交換後用較大的數減去較小的數:\(1010_2 - 0011_2 = 0111_2 = 7\),然後恢復符號得到 \(-111_2 = -7\)。這與 \(3 - 10 = -7\) 相符。
示例 3 — \(110_2 - 110_2\)(值相等)。每一列都減成 0,沒有借位:\(0-0\)、\(1-1\)、\(1-1\) 都得 0,所以差是 \(0_2 = 0\)。
關鍵術語
- 被減數
- 被減去的數字 — 寫在上面的值。在 \(1010_2 - 11_2\) 中,被減數是 \(1010_2\)。
- 減數
- 要減去的數字 — 寫在下面的值。在 \(1010_2 - 11_2\) 中,減數是 \(11_2\)。
- 差
- 減法的結果:\(\text{被減數} - \text{減數}\)。
- 借位
- 當一列需要 \(0-1\) 時,從下一個更高的列取 1,使當前列變成 \(10_2\)(值 2),允許 \(10_2 - 1 = 1\)。被借出的列減少 1,如果該列也是 0,借位可能進一步向左級聯。
- 二進制/基數 2
- 只使用數字 0 和 1 的位置記數系統,其中每個位置值是 2 的冪(\(\dots, 8, 4, 2, 1\))。
- 位(二進制位)
- 單個二進制位,要麼是 0 要麼是 1。一組位代表更大的數字;例如 \(1010_2\) 有四位。
- 二的補數
- 計算機表示有符號整數的常見方式。負值通過反轉其絕對值的所有位並加 1 形成,這允許在固定位寬內將減法作為加法執行負數。
- 符號-絕對值
- 另一種有符號表示法,其中最左邊的位表示符號(0 = 正,1 = 負),其餘位給出絕對值。易於讀取,但有兩個零的編碼,比二的補數更不方便進行算術運算。
常見問題
結果可以是負數嗎?可以。如果減數比較大,計算機會回傳一個負的二進位數值,例如 -101。
如果輸入了無效字元怎麼辦?只有 0 和 1 才是有效的二進位數字。任何非二進位的輸入都會被視為 0。
這和二的補數(two's complement)減法一樣嗎?十進位數值會相同,但本工具顯示的是「符號—數值」形式的結果(也就是加上負號),而非固定位寬的二的補數表示法。