2進数の引き算計算機とは?
このツールは、2進数(基数2)から別の2進数を引き算し、その答えを2進数と10進数の両方で表示します。2進数は0と1の2つの数字だけを使い、各桁が2のべき乗を表します。2進数の引き算を手作業で行うと、桁をまたいで「借りる(繰り下げ)」処理が必要になり、ミスが起こりやすいものです。この計算機なら一瞬で答えを出し、さらに10進数での計算と照合して結果の正しさを確認できます。
使い方
1つ目の2進数(引かれる数:被減数)と、2つ目の2進数(引く数:減数)を、0と1だけで入力します。「計算」を押すと、2進数の差に加えて、それぞれの入力値の10進数換算と結果の10進数値が表示されます。2つ目の数のほうが大きい場合は、結果はマイナス記号付きの負の2進数として表示されます。
計算式の解説
もっともシンプルで確実な方法は、各2進数の文字列を10進数の整数に変換し、通常どおりに引き算をしてから、その差を2進数に戻すというものです。
$$\text{結果} = \text{2進数に変換}\left( \text{2進数を解析}(a) - \text{2進数を解析}(b) \right)$$
たとえば、2進数の1010は \(1\cdot8 + 0\cdot4 + 1\cdot2 + 0\cdot1 = 10\)(10進数)に等しくなります。この方法なら、手作業の繰り下げを避けながら、まったく同じ結果が得られます。
計算例
1010から11を引いてみましょう。まず変換すると、\(1010_2 = 10_{10}\)、\(11_2 = 3_{10}\) です。次に \(10 - 3 = 7\) となります。7を2進数に戻すと \(111_2\) です。したがって \(1010 - 11 =\) 111 となります。
手作業で二進法の減算を行う方法(借用法)
直接的な二進法の減算は十進法の減算と全く同じように機能しますが、二進法では各列は0か1のいずれかのみを保持します。重要なアイデアは借用です。0から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\)。両方とも4ビットに詰められています。十進法での確認:\(10 - 3\)。
- 列0(最右端):上が0、下が1 → \(0-1\)は借用が必要です。列1から借用し、\(10_2 - 1 = 1\)を得ます。結果ビット = 1。列1の上のビットは1から0に下がります。
- 列1:貸出後、上が0、下が1 → \(0-1\)は借用が必要です。列2から借用し、\(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\)は4ビットです。
- 2の補数
- コンピュータが符号付き整数を表現する一般的な方法。負の値は、その絶対値のすべてのビットを反転して1を加えることで形成され、固定ビット幅内で減算を否定された数の加算として実行できます。
- 符号絶対値表現
- 左端のビットが符号を示し(0 = 正、1 = 負)、残りのビットが絶対値を示す代替的な符号付き表現。読みやすいですが、ゼロの2つのエンコーディングがあり、2の補数より算術に不便です。
よくある質問
結果がマイナスになることはありますか? はい。減数のほうが大きい場合、計算機は -101 のような負の2進数を返します。
無効な文字を入力するとどうなりますか? 2進数として有効なのは0と1だけです。2進数以外の入力は0として扱われます。
これは2の補数による引き算と同じですか? 10進数の値は一致しますが、このツールは固定幅の2の補数表現ではなく、符号付き絶対値(マイナス記号付き)の結果を表示します。