2進数計算
計算結果
2進数
- 10進数
- 17
- 16進数
- 11
- 余り
- 0
2進数の計算ツールは、2を基数として書かれた数の足し算・引き算・掛け算・割り算を行い、答えを2進数・10進数・16進数で同時に表示します。2進数が使う桁は0と1だけで、計算そのものはすでに知っている計算と同じです。変わるのは繰り上がりが起きる位置だけです。10進数では9 + 1が繰り上がるのは10が基数だからで、2進数では1 + 1が繰り上がるのは2が基数だからです。この1つの事実が2進数の足し算の全部で、引き算も掛け算も割り算も、予想どおりの仕方でそこから従います。答えを3通りに印字するのは、3つの読みがそれぞれ別の役に立つからです。2進数は求めに来たもの、10進数は一目で確かめられるもの、16進数は同じビットを4つずつまとめたもので、機械語を書く人がそう読む形です。割り算は整数の割り算なので、余りは小数点に消えるのではなく自分の行を持ちます。
公式
「1011」 + 「110」 = 10001(10進数では11 + 6 = 17)
- 「1011」
- 1つ目の数で、2を基数として書かれています。2進数として読むからこそこれが11になるのであって、同じ桁を10進数として読めば「1011」という別の数になります。このページが防ぐために存在しているのが、まさにその間違いです
- + − × ÷
- 演算です。桁ごとに、10進数のときとまったく同じに働きます。繰り上がりや借りが起きる場所で、10が2に置き換わるだけです
- 1 + 1 = 10
- 2進数の計算で唯一、すでになじみのない事実です。1が2つで0になり、次の位へ1が繰り上がります。桁が1で尽きるからです。1が3つなら11で、答えの1と繰り上がりの1になります
- 各桁 × 2ⁿ の総和
- 10進数の読みがどう作られるかです。2進数の各桁にその位の値を掛け、結果を足し合わせます。「10001」が17になるのはこの道筋で、2進数の答えと10進数の答えを結ぶ唯一の経路です
- 余り
- 割り算が割り切れなかったときに残るものです。「1011」を10で割ると商は101で、1が残ります。11は2が5つと、それに1つぶんです。余りは常に表示され、余りを残しようがない3つの演算では0になります
- 53ビット
- このページが受け付ける入力の幅です。9007199254740991までで、2進数では1が53個続く数になります。その幅を超えると、機械の数は隣り合う整数を見分けられなくなり、計算は静かに正確でなくなります
2進数を読んだり書いたりする人には、10進数の計算ツールが必要なのと同じ理由でこのページが要ります。計算は難しくないのですが、手でやると遅く、しかも間違いは見えません。日常的な用途は、ハードウェアのレジスタやビットマスクを読むことです。「1011」に何かをANDする、ステータスバイトのどのフラグが立っているかを確かめる、といったことです。コンパイラやデバッガやネットワークツールが2進数で印字した値を点検するのにも使います。サブネットマスク、ファイルのパーミッションビット、CPUのステータスレジスタのフラグ列、マイコンのピン状態はどれも2進数で、人はそれに対して計算をする必要があり、答えの隣に並ぶ16進数の読みが、そうした値が仕様書に実際に書かれる形です。もう1つの用途は学習です。繰り上がりの規則は、誰もが紙の上で一度は間違えるところで、「1011」と「110」を打ち込んで答えの「10001」が出るのを見るほうが、本の計算例を読むより速く直ります。基数の変換を手で解いている学生も、機械語の一覧を確かめられる形に戻したい人も、10進数と16進数の読みがほとんどの仕事をしてくれるはずです。
計算例
「1011」と「110」を足す
- 2つの数を右端でそろえる:「1011」と「0110」
- いちばん右の列:1 + 0 = 1
- 次の列:1 + 1 = 10なので、0を書いて1を繰り上げる
- 次の列:0 + 1 + 繰り上がりの1 = 10なので、0を書いて1を繰り上げる
- いちばん左の列:1 + 繰り上がりの1 = 10なので、0を書いて1を新しい位へ繰り上げる
- 結果は「10001」と読め、10進数では16 + 1 = 17である
このページの冒頭の例で、繰り上がりの規則が働くところをいちばん速く見られる場合です。最後の繰り上がりが自分の位を必要としたので、和はどちらの入力より長くなっています。10進数の17が点検になります。11足す6は本当に17です。16進数の11は同じビットを4つずつまとめたもので、だからたまたま10進数の11と同じに見えます。この一致は数が大きくなった瞬間に消えます。
「1011」を「10」で割る
- これは11を2で割る計算なので、答えは5で1余る
- 5は2進数で101、1は1である
- このページは商を101、余りを1として報告し、101.1とは印字しない
余りの行がなぜ存在するかを示す例です。商だけを印字すると、101は11を2で割ると5だと言っていることになり、その下の行がその文を本当にしています。ここで小数点に手を伸ばさない理由はもう1つあります。結果が小数部分を持つ瞬間から、計算が終わらなくなることがあるからです。1を3で割った2進数は無限に続きます。このページの入力と出力は全体を通して整数です。
「110」から「1011」を引く
- これは6から11を引く計算なので、答えは負になる
- 差は5で、符号は結果の前に付けられる
- 5は101なので、答えは-101である
ここでは2の補数を一切使っていません。プロセッサが負の数を保存するときに使う方式です。マイナス記号は数の前に付いた符号のままにしておきます。人が紙に書くときの形で、10進数や16進数の読みの隣に並べても読める形です。同じ値を機械が表すときは固定幅のビット列になりますが、その幅はこのページが持っているものではありません。
適用限界
このページは整数だけを扱います。2進小数点も小数の2進数もないので、1.01は受け付けません。つまり割り切れない割り算は、小数展開ではなく商と余りになり、商は丸めるのではなく0の向きに切り捨てられます。入力は9007199254740991まで、2進数で1が53個続く数に限られます。それを超えると計算の正確さが保証できなくなるので、それほど大きな入力は近似値で答えるのではなく拒否します。結果にも同じ上限がかかるので、あふれる掛け算は誤った数ではなくエラーを報告します。負の数は2の補数ではなく前にマイナス記号を付けて書き、固定のビット幅は提供も仮定もしません。ここでの「1011」は4ビットであって、レジスタの下位4ビットではありません。0での割り算は拒否します。
よくある質問
- 1 + 1が2ではなく10になるのはなぜか
- 2進数には2という桁がないからです。桁は0と1で、そこで列が尽きます。10進数で一の位が9のあとで尽きるのとまったく同じです。だから1が2つでその列は0になり、次の列へ1が繰り上がって10と書きます。これは10進数の9 + 1 = 10と同じことを、基数を変えて述べたものです。1が3つなら11で、答えの1と繰り上がりの1になります。
- 足し算や掛け算でも余りの行がいつも出るのはなぜか
- 結果パネルが、選んだ演算に合わせて伸び縮みする一覧ではなく固定の一覧だからです。出たり消えたりする行は、いつも同じ場所にある行より読みにくいものです。引き算・足し算・掛け算は整数では余りを残せないので、そこは0と表示されます。この0は、その演算が余りを残さなかったと言っている行であって、計算に失敗したしるしではありません。余りを残せるのはこのページでは割り算だけで、切り捨てた商が正確な答えに見えるのを防いでいるのがこの行です。
- 入力できるいちばん大きな数はいくつか
- 9007199254740991で、2進数では1が53個並び、16進数では1FFFFFFFFFFFFFです。この上限は、機械が隣り合う整数を見分けられなくなる幅なので、それを超えると計算は静かに正確でなくなります。結果は数に見えますが、数ではありません。それより広い入力は切り捨てや丸めではなくメッセージを付けて拒否し、同じ上限をあふれる結果も拒否します。
- 引き算をして答えが負になることはあるのか
- あります。大きいほうの数を2つ目の欄に入れると、答えは3つの読みすべてで前にマイナス記号が付いて返ります。これは2の補数ではありません。プロセッサが負の数を固定幅のビットに保存するときの表し方ではなく、前に符号を付ける形で、紙に書くときの形であり、10進数や16進数の読みの隣でも読める形です。ビット幅は仮定していないので、負の答えが1の並びに巻き込まれることはありません。
- 割り算が正確でないのはなぜか
- このページが整数を扱うので、割り切れない割り算は0の向きに切り捨てた商と余りになるからです。11を2で割ると5余り1で、このページは101.1ではなく101と1を報告します。これは穴ではなく意図した選択です。結果が小数部分を持った瞬間から計算が終わらなくなることがあり、1を3で割った2進数は循環小数になります。それを黙って丸めるページは、答えではない数を印字することになります。
- 16進数の読みは何のためにあるのか
- 同じ値を4ビットずつまとめたもので、機械語を書く人が2進数をそう読むからです。1バイトは8ビットなので16進数でちょうど2桁になり、仕様書やデバッガやデータシートに現れるのはFFや2AやB2の形です。2進数と16進数の変換は計算というよりまとめ直しなので、ここではこの読みに手間がかかりません。
参考文献
- Binary number — 2を基数とする数体系、位取り記法、繰り上がりの規則と四則演算 — Wolfram MathWorld (United States)
- Number base — 数字の値がその位置と基数で決まる理由、および同じ量が別の基数でどう書かれるか — Wolfram MathWorld (United States)
- IEEE 754 — これらの計算が行われる倍精度形式と、このページの入力上限を決めている53ビットの仮数部 — IEEE Standards Association (United States)
- 教育部关于印发义务教育课程方案和课程标准(2022年版)的通知——この通知の添付資料リストの第5項が《义务教育数学课程标准(2022年版)》にあたる。2進数と数体系は情報科技と数学の課程が交わる内容で、課標の原文と学段の区分はこの添付による — 中华人民共和国教育部