n進数計算
計算結果
結果
- 10進数
- 17
- 余り
- 0
基数とは、数字の並びを値に変える規則のことです。右端を0と数えた位置だけ基数を掛け合わせ、各桁をその重みで評価して足し合わせます。2進数で使える数字は0と1だけで、左へ1つ進むごとに2倍になります。「1011」は1×8+0×4+1×2+1×1で、11です。16進数では数字が0から9まで続いたあとにAからFが並び、左へ1つ進むごとに16倍になります。「FF」は15×16+15で、255です。このページでは基数を2から36まで自由に選び、その基数のまま足し算・引き算・掛け算・割り算ができます。基数は別種の数ではなく、同じ数を別の書き方で表したものにすぎません。だからこのページは答えを2通りの読み方で並べて印字します。2進数の「1011」に「110」を足すと「10001」になり、それは11+6=17であり、17は2進数で「10001」です。どちらの行も同じことを言っています。10進数の行は、別の基数の中で一日を過ごさない読み手のためのものです。始める前に知っておきたいことが3つあります。9より大きい数字には記号が要り、長い慣習でAからZが10から35を表します。だから36進数が、キーボードの文字だけで書ける最大の基数になります。数字は基数より小さいときだけ使えるので、2は2進数の数字ではなく、「1012」は見た目が数字らしくても2進数ではありません。そして基数そのものは答えの一部ではありません。「10001」が17を意味するのは基数を2と決めたからで、ページは数字だけを印字し、基数は選んだ欄に任せます。計算そのものは普通の計算で、変わるのは表記だけです。足し算は桁が10に届いたときではなく基数に届いたときに繰り上がるので、「FF」に1を足すと「FG」で止まらず「100」に繰り上がります。Gは存在しません。16は数字ではないからです。基数の計算が本領を発揮するのは割り算です。ある数を別の数で割ると商と余りが出て、どちらも選んだ基数で印字されます。余りの行は常に表示されます。足し算・引き算・掛け算では0です。整数では、何も残らないことと余りが0であることは同じ主張だからです。引き算は0を下回ることがあり、そのときは答えに負号が普通の書き方で付きます。負号は数字の集合には入りません。
255を2・8・10・16進数で書き、位の値も並べた表
| 基数 | その基数での表記 | 位の値 |
|---|---|---|
| 2 | 11111111 | 128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 |
| 8 | 377 | 3×64 + 7×8 + 7 |
| 10 | 255 | 2×100 + 5×10 + 5 |
| 16 | FF | 15×16 + 15 |
真ん中の列を上から読むと、同じ値が4通りに現れます。「11111111」、「377」、「255」、「FF」です。行の間で数のほうは何も変わっていません。変わったのは記号と、1桁が進む歩幅だけです。3列目はそれぞれの表記を255に戻す計算です。2進数では1が8つ並ぶので、128から1までの重みがすべて現れます。16進数では2桁しかありませんが、1つ目の桁に2ではなく16が掛かります。基数が上がるほど桁数が減ることに注目してください。255を言うのに2進数は8桁、8進数は3桁、10進数は3桁、16進数は2桁です。基数が大きいほど同じ値を少ない桁で言えます。1桁の値が重いからです。この取引こそが基数の存在理由です。16進数がバイトに使われるのは数学的に特別だからではなく、その2桁がちょうど1バイトを覆うからで、その下の層で2進数が使われるのは、入るか切れるかの2状態しか持てない線がちょうど2つの状態を持つからです。表は入力した数には従いません。入力への答えは上のパネルが出し、こちらは1つの値の4通りの書き方を示します。
公式
「1011」+「110」=「10001」(2進数)、11+6=17(10進数)⇒ 2進数の「10001」は17で、1つの値の2通りの書き方
- b
- 基数で、2から36までの整数です。35個の選択肢の一覧ではなく普通の数値欄なので、制限は欄そのものに掛かります。1と37は計算が始まる前に拒否されます。基数1は1つの記号では0より大きい値を数えられないので成り立たず、基数37にはどのキーボードにも無い37番目の記号が要ります
- 「1011」
- 2進数で書いた11です。1×8+0×4+1×2+1×1。右から左へ読んでください。位の重みがその向きに流れるからです。同じ11は10進数でも11、8進数では13、16進数ではBです
- 「10001」
- 「1011」+「110」の答えで、やはり2進数です。1×16+0×8+0×4+0×2+1×1で、17になります。途中で2回繰り上がりました。一の位が2に届き、四の位も2に届いたからです。どちらも1つ左へ移りました。10進数で桁が10に届いたときに繰り上がるのとまったく同じ動きです
- FF
- 15×16+15で、255です。16進数は1バイトにちょうど収まる基数です。16進数の2桁で0から255までのすべての値を覆えるので、バイトを扱う場所には必ず現れます。AからFが9より先の6つの数字です
- 17 ÷ 5 = 3 r 2
- 割り算を書き下したものです。2進数で同じ割り算は「10001」÷「101」=「11」余り「10」で、ページは商を結果として、余りを独立した行として印字します。余りは常に割る数より小さいから余りなのであって、分数ではありません
- A to Z
- 10進数の基数を36まで押し上げる26個の追加の数字です。Aが10、Bが11、Zが35です。大文字と小文字のどちらでも入力でき、ページは大文字で印字します
別の基数を話す仕組みから値を読み取るのが日常的な用途です。メモリダンプはバイトを16進数の2桁で印字し、ファイルのパーミッションが755と表示されるのは3桁がそれぞれ3ビットを詰めているからで、サブネットマスクは8ビットの組を4つ並べたもので、IPv6アドレスは全体が16進数です。いずれの場合も欲しいのは10進数の値ではありません。機械が見ている基数を見たいのです。同じ仕組みへ書き込む側は裏返しの場面です。レジスタのビット列を組み立てる、赤・緑・青のバイトから色を作る、シフトした値がなぜ負になったかを突き止める、いずれも10ではない基数で計算することを意味します。授業では、位取り記数法が事実ではなく選択であることを示すものとして基数の計算を教えます。練習問題はこのページがやっていることそのものです。2進数で繰り上がり、8進数で借りを作り、両側を同じ基数で読めば同じ演算がどの基数でも同じ答えになることを確かめます。4つ目の用途は検算です。2進数で「1011」に「110」を足した結果が10進数の17でなければ、2つの読み方のどちらかが間違っています。両方を同じページに並べることで、その確認が初めて可能になります。基数が2または16のときは、専用のページがもっと深く扱います。2進数計算と16進数計算は基数を埋めただけの同じ計算で、2つの変換ページは演算を挟まずに基数を移す手順を扱います
計算例
2進数での足し算:「1011」+「110」
- 何を足しているのかを知るために、両方のオペランドを10進数で読みます。「1011」は11、「110」は6です
- 11+6=17
- 17を2進数で書きます。17=16+1なので、数字は1、0、0、0、1
- 2進数の答えは「10001」で、10進数の行がそれが17だと裏づけます
既定の入力であり、下の表が別の基数でなぞる値でもあります。2つの文字列を桁ごとに足しても同じ答えになります。1+0は1、1+1は0で1繰り上がり、続いて0+1にその繰り上がりを足して0で1繰り上がり、最後の繰り上がりが左に新しい桁を作ります。桁が2に届いたら繰り上げる、それだけが2進数の足し算です。オペランドが4桁と3桁だったのに「10001」が5桁になるのは、この繰り上がりのせいです
最後の桁からあふれる繰り上がり:16進数の「FF」+「1」
- 「FF」は15×16+15=240+15=255です
- 1を足すと256になります
- 256を16進数で書きます。256=1×256+0×16+0なので、数字は1、0、0
- 答えは16進数の「100」です。これは256のことで、百ではありません
この例が存在する理由そのものの罠です。「100」は10進数では小さな数ですが、16進数ではずっと大きな数になります。桁ごとに読むと、なぜそんなに桁が伸びるのかが見えます。Fに1を足すと16で、それは16進数の数字ではありません。だから繰り上がって0が残り、繰り上がった1は埋まっていたFに乗り、そこでまた繰り上がります。足し算1回で答えが2桁ぶん上がりました。10進数で99+1が100になるのと同じ出来事であり、バイトが255から256にあふれると2バイト目が要るのもこのためです
余りの出る割り算:2進数の「1011」÷「10」
- 「1011」は11、「10」は2です
- 11÷2=5で余り1
- 5を2進数で書きます。5=4+1なので、数字は1、0、1
- 商は「101」で、余りの行は1です。そして「101」は5で、10進数の行がそれを裏づけます
4つの演算のうち余りが0にならない唯一のもので、余りの行がこのページにある理由です。商は整数部分だけであることに注意してください。11を2で割ると5.5ですが、ページは「10.1」や「101.1」ではなく「101」と余り1を印字します。余りは答えを整数のまま保つからです。あの0.5は余りの1の中にあります。検算は5×2+1=11で、どの基数でも成り立ちます
適用限界
基数は2から36までの整数でなければなりません。1は成り立ちません。1桁では0以外の値を表せないからです。37には37番目の記号が要ります。欄は計算が始まる前にどちらも拒否します。小数と分数は丸めずに拒否し、オペランドの前の負号も同じです。ページは数字を解析するのであって、負号や小数点は数字ではないからです。選んだ基数に対して大きすぎる数字は別の話で、それがどう扱われるかは率直に書いておく価値があります。基数を2にしたまま「1012」と入力すると、問題の桁を名指しするメッセージではなく、計算エラー一般が出ます。これは見落としではなく意図した取引です。入力欄の検査は文字列だけを渡され、隣の基数の欄を読む手立てがありません。正直な選択肢は、どの基数かで合法になりうる数字列を受け入れるか、何でも受け入れるかの2つでした。ページは前者を取りました。実際の影響として、入力欄は赤くならず、代わりに結果パネルにエラーが出ます。答えが間違うことはありません。説明が薄いだけです。両方のオペランドは60文字まで、かつ倍精度が正確に表せる最大の整数9007199254740991までに限られます。これは10進数で16桁、2進数でおよそ50桁です。答えにも同じ上限が掛かります。正確に計算したうえで確認するので、結果が上限を越える演算は丸めた値として印字されず、拒否されます。文字は大文字でも小文字でも入力でき、大文字で印字されるので、「ff」と「FF」は同じ入力です。先頭の0は受け入れられて無視されるので、「00001011」と「1011」は同じ数で、どちらも「1011」と印字されます。下の参考表は2・8・10・16進数の255に固定されていて、入力した数には従いません。パネルは入力した数に答え、表は1つの値の4通りの書き方を並べて見せる役割です。
よくある質問
- 10ではない基数で2つの数を足すにはどうすればよいですか
- 10進数とまったく同じように、右から桁ごとに足します。違うのは、桁が10に届いたときではなく基数に届いたときに繰り上がることだけです。2進数では繰り上がりのしきい値が2しかありません。1+1は0で1繰り上がりです。だから「1011」+「110」は「10001」になります。2の位と4の位がそれぞれあふれ、1つ上の位へ1を押し出したからです。繰り上がりを追いたくなければ、両方のオペランドを10進数に直し、そこで計算してから戻してください。このページの10進数の行が示しているのがそれで、いつでも同じ答えになります
- 基数が2のときに「1012」が失敗したのはなぜですか
- 2が2進数の数字ではないからです。2進数の数字は0と1だけで、それ以外はありません。規則は「数字は基数より小さくなければならない」で、2進数は0と1、8進数は0から7、10進数は0から9、16進数は0から9とAからFを使えます。表示されるのは桁を名指しするメッセージではなく計算エラー一般で、これは承知のうえの粗さです。入力欄の検査は入力した文字列しか見えず、選んだ基数は見えないので、どの基数かで合法になりうる数字列を受け入れ、基数に依存する検査は計算側に任せています。答えが間違うことはありませんが、説明は本来より薄くなります
- 使える基数はどれで、なぜ36で止まるのですか
- 2から36までの整数です。上限を決めているのは数学ではなくキーボードです。9より大きい数字には記号が要り、その慣習的な記号がAからZまでの26文字で、10に26を足すと36になります。基数1が成り立たないのは別の理由です。数字が1つしかないと0より大きい値を書けません。どの位も1の値になり、2に到達する手立てが無くなるからです
- 16進数の「100」は百と同じですか
- 違います。このページの2つ目の例がまさにその誤解を防ぐためにあります。16進数の「100」は1×256+0×16+0、つまり256です。文字は同じでも、位の値が1つ進むごとに10倍ではなく16倍になるので、同じ3つの記号が別の値を表します。どちらの読み方なのかを推測しなくて済むように、10進数の行が置かれています
- 足し算でも余りの行が常に出るのはなぜですか
- 整数では、何も残らないことと余りが0であることが同じ主張であり、出たり消えたりする行は常にある行より読みにくいからです。足し算・引き算・掛け算では行は0と表示されます。余りが0以外になるのは割り算だけで、そこでは割り切れなかった分をその行が引き受けます。2進数の「1011」÷「10」は1を残しますが、それは11÷2の半分を商が切り捨てたものです
- このページで10進数の計算はできますか
- できますし、普通の電卓と一致するかを確かめるのに便利です。基数を10にすれば、数字も繰り上がりも答えの形も変わらないので、期待どおりに振る舞います。得られるのは余りの行と基数の明示で、失うものは何もありません。隣のページは逆の作りです。2進数計算と16進数計算は基数を2と16に固定した同じ計算で、変換ページは演算を挟まずに値をある基数から別の基数へ移す手順を扱います
参考文献
- Base — 位取り記数法とは何か、基数bの展開の各桁をどう読むか、そして基数が1より大きい整数でなければならない理由 — Wolfram MathWorld (United States)
- Hexadecimal — 16進数、9より先の6つの文字、そして16進数の2桁が1バイトに等しくなる慣習 — Wolfram MathWorld (United States)
- Binary — 2進数と、その桁が表す位の値1・2・4・8 — Wolfram MathWorld (United States)
- 学習指導要領(平成29・30・31年改訂) — 算数・数学の「数と計算」領域と、情報科技で扱う記数法とのつながりの根拠になる文部科学省の告示・解説 — 文部科学省