2進数電卓とは?
2進数の加算・減算・乗算・除算・剰余・べき乗を行う算術計算機です。結果を2進数・10進数・8進数・16進数で同時に表示します。
基本の演算に加えて、同じ値を 2 進・10 進・8 進・16 進の 4 つの基数で同時に表示します。10 進数で入力すると、計算の前に自動で 2 進数へ変換します。長さに事実上の上限はなく、引き算の結果が負になっても扱えます。除算は整数のみで余りを切り捨てる仕様で、これは低レベルの CPU 命令と同じです。その余りがほしいときは剰余の演算を、指数を求めたいときはべき乗の演算を使ってください。8・16・32 ビットのレジスタ幅を選ぶと、結果をその大きさに詰め、CPU レジスタが格納するのと同じ 2 の補数の符号付き値として読めます。
使い方
- 2つの数を入力します。2進数のままでもよいし、入力欄を10進数に切り替えれば自動で2進数に変換されます。
- 演算を選びます。加算・減算・乗算・除算・剰余(余り)・べき乗に加え、ビット演算の AND・OR・XOR・NOT とシフトが使えます。
- 2進数・10進数・8進数・16進数で結果を確認します。
使用するタイミング
- ビット演算の宿題を答え合わせしたり、デジタル論理の試験勉強に使う。
- レジスタから読んだ 2 進数を 10 進と 16 進に並べて確認する。
- アセンブリのルーチンを書く前に、桁上がりと桁下がりの挙動を検算する。
結果
11011 + 10110(10進数で27 + 22)は110001(49)となり、2進数・10進数・8進数・16進数で表示されます。
よくある質問
- 大きい数から小さい数を引くわけでもないのに、なぜ 10 進が負になるのですか?
- 本ツールは入力を符号なし正整数として扱い、結果は符号付きで表示します。実際の CPU は 2 の補数で扱うため、大きい正の値に巻き戻ります。0001 - 0010 はここでは -1 と表示されますが、8 ビットレジスタなら 11111111 になります。上で 8 ビットのレジスタ幅を選ぶと、そのビットパターンと符号付きの読み方をそのまま確認できます。
- 2 の補数の入力には対応していますか?
- 入力は今も単純な値として読み込まれ、符号ビットはありません。ただし手動で詰める必要はなくなりました。8・16・32 ビットのレジスタ幅を選ぶと、結果がその幅に詰められ、ハードウェアのレジスタと同じように折り返された 2 の補数として、符号付き 10 進の読みと一緒に表示されます。
- なぜ除算は切り捨てで、小数の答えが出ないのですか?
- 多くのプロセッサが持つ整数 DIV 命令と同じく、0 方向に切り捨てて余りを捨てます。1010 ÷ 0011(10 ÷ 3)は 11(10 進で 3)で、3.33 にはなりません。その余りがほしいときは剰余の演算に切り替えてください。小数が必要なら先に 10 進へ変換してから計算します。
- 2 進数文字列はどこまで長く入力できますか?
- JavaScript の parseInt と Number は 53 ビット精度まで扱えるので、50 ビット前後の入力なら厳密に正しい結果が出ます。それより長いと下位ビットが浮動小数点丸めでずれる可能性があるため、学習用には十分ですが暗号用途には不向きです。
- 16 進数の結果はどう読めばよいですか?
- 16 進数(基数 16)は 2 進 4 ビットを 1 桁にまとめ、0〜9 と A〜F を使います。2 進 11111111 = 16 進 FF = 10 進 255 です。各桁がちょうどバイトの上位/下位 4 ビットに対応するので、プログラマは 16 進を好みます。