2進数の掛け算計算機とは?
このツールは、2つの2進数(基数2)を掛け算し、その積を2進数の文字列として返します。あわせて、両方の入力値と計算結果の10進数換算も表示します。2進数の計算は世界共通のしくみなので、特定の国や制度に左右されることはなく、どこで使っても同じように役立つ汎用的な数学ツールです。
使い方
各入力欄に2進数(0と1の数字のみ)を入力してください。それ以外の文字は無視されるため、スペースや余計な記号が混ざっても計算結果が崩れることはありません。「計算する」を押すと、積が2進数と10進数の両方で表示されます。
計算式の解説
2進数の掛け算は、ビットごとにシフトと加算を繰り返す方法でも求められますが、もっともシンプルなのは、それぞれの数を10進数に変換して掛け算し、その答えを再び2進数に戻す方法です。式で表すと、$$P_2 = \text{bin}\left(\text{dec}\left(A_2\right) \times \text{dec}\left(B_2\right)\right)$$ となります。たとえば2進数の1010は、\(1 \cdot 8 + 0 \cdot 4 + 1 \cdot 2 + 0 \cdot 1 = 10\) となるため、10進数の10に等しくなります。
計算例
1010 × 11 を計算してみましょう。まず変換すると、\(1010_2 = 10\)、\(11_2 = 3\) です。10進数で掛け算すると、\(10 \times 3 = 30\)。この30を2進数に戻すと、$$30 = 16 + 8 + 4 + 2 = 11110_2$$ となります。したがって、1010 × 11 は2進数で 11110 です。
二進数を手で乗算する方法
二進数の乗算は10進数と同じシフト・アンド・アッド長乗法手続きを使いますが、乗数の各桁が0または1のどちらかであるため、はるかに単純です。1で乗算すると被乗数がコピーされ、0で乗算すると0の行が得られます。実際の作業は、各部分積をそのビット位置だけ左にシフトしてから、二進キャリー規則で行同士を足し合わせることだけです。
\((1010)_2 \times (11)_2\)の具体例ステップバイステップ:
- オペランドを設定する。被乗数\(A = 1010_2 = 10\)、乗数\(B = 11_2 = 3\)。予想される積は\(10 \times 3 = 30\)です。
- 乗数の最右ビット(ビット0 = 1)で乗算する。ビットが1なので、被乗数をコピーします:部分積\(= 1010\)、左シフト0桁。
- 次の乗数ビット(ビット1 = 1)で乗算する。ビットが1なので、被乗数を再度コピーして左に1桁シフトします(末尾にゼロを1つ追加):部分積\(= 10100\)。
- ゼロの行をドロップする。乗数ビットが0だった場合、その行全体がゼロになり、スキップできます。ここではどちらの行も保持します。
- 二進加算で部分積を足し合わせる。位値で揃えて足し合わせ、2つの1が出会うたびにキャリーします(\(1+1 = 10\)、0と書いて1をキャリー):
\(\;\;\;01010\)
\(+\,10100\)
\(=\,11110\) - 結果を読む。二進積は\((11110)_2\)で、10進では30に等しい — \(10 \times 3 = 30\)を確認します。加算ステップそのものは11110として検証できます。
要するに:乗数ビットごとに1つシフトされた行を生成し(0ビットについてはゼロ行),二進加算を使ってすべての行を合計します。\(m\)ビット数と\(n\)ビット数の完全な積は\(m+n\)ビットを超えることはありません。
その他の具体例
各例は両方の入力の10進変換、シフト・アンド・アッド部分積、および最終的な二進積を示しています。
例1 — \(111_2 \times 101_2\)(7 × 5 = 35)
- 変換:\(111_2 = 7\)、\(101_2 = 5\)。
- 乗数ビット(右から左へ)は1、0、1です:
- ビット0 = 1\(\Rightarrow 111\)(シフト0)
- ビット1 = 0\(\Rightarrow\)ゼロ行、スキップ
- ビット2 = 1\(\Rightarrow 11100\)(シフト2)
- 足し合わせ:\(00111 + 11100 = 100011\)。
- 結果:\((100011)_2 = \)35、\(7 \times 5 = 35\)と一致します。
例2 — \(1100_2 \times 1010_2\)(12 × 10 = 120)
- 変換:\(1100_2 = 12\)、\(1010_2 = 10\)。
- 乗数\(1010_2\)ビット(右から左へ)は0、1、0、1です:
- ビット0 = 0\(\Rightarrow\)スキップ
- ビット1 = 1\(\Rightarrow 11000\)(シフト1)
- ビット2 = 0\(\Rightarrow\)スキップ
- ビット3 = 1\(\Rightarrow 1100000\)(シフト3)
- 足し合わせ:\(0011000 + 1100000 = 1111000\)。
- 結果:\((1111000)_2 = \)120、\(12 \times 10 = 120\)と一致します。
例3 — \(1_2 \times 1101_2\)(1ビット乗数、1 × 13 = 13)
- 変換:\(1_2 = 1\)、\(1101_2 = 13\)。
- 乗数\(1\)は1に等しい単一ビットを持つため、シフトのない部分積が正確に1つあります:\(1101\)。
- 行が1つだけなので、足し合わせるものはありません。
- 結果:\((1101)_2 = 13\)。二進数に1を乗算すると、10進数と同様に、それは変わりません。
よくある質問
2進数以外の数字を入力したらどうなりますか? 0と1以外の数字は計算前に取り除かれるため、有効な2進数の桁だけが使われます。
大きな数にも対応していますか? はい。入力値は64ビット整数として処理されるので、非常に長い2進数でもその上限まで正確に計算できます。
なぜ10進数の値も表示するのですか? 10進数での表示を見ることで、変換が正しいかを確認でき、実際に何を掛け合わせているのかを直感的に理解できます。