16進数→10進数変換
計算結果
10進数
- 各位の値
- 2×4096 + 10×256 + 3×16 + 15
16進数から10進数への変換ツールは、16進数の数を10を基数とする表記に書き換えます。2進数への変換と違い、これは本当の計算です。16進数の値は、各文字にその位が持つ16の累乗を掛けたものの和です。位は右端を0として数えます。「2A3F」は最後の位にFがあるのでFは15、その次の位の3は3×16、その次の位のAは10×256、先頭の2は2×4,096の値を持ちます。足し合わせると10,815になります。文字がこの計算を狂わせる場所で、狂い方は2通りあります。1つ目は、何かを掛ける前にAを10、Fを15に置き換えなければならないことです。Aを1として読むと、それらしい見た目の間違った答えが出ます。2つ目は、文字が表す値がその位の分だけ掛けられることです。最後の位のFは15ですが、1つ左の位のFは240です。文字は量ではなく係数なのです。16の累乗はこのページの残りの半分で、その並びは知っておく価値があります。1、16、256、4,096、65,536と続き、それぞれが前の16倍です。その一覧に16進数を右から突き合わせて読むほうが、その場で累乗を計算するより速いのです。16は2の累乗なので、これらは2の累乗を4つずつ飛ばしたものでもあります。16は2⁴、256は2⁸、65,536は2¹⁶です。4ビットを抱える位が16の累乗を1つずつ持つのもそのためです。このページは和の全体を答えの隣に印字するので、項ごとに点検できます。2×4,096 + 10×256 + 3×16 + 15が10,815になり、1文字でも間違えれば、期待した数に足し戻らない和として現れます。
16の累乗。いちばん右の位から、受け付ける入力が届くいちばん広い位まで
| 位 | 16の累乗 | 値 |
|---|---|---|
| 13 | 16¹³ | 4503599627370496 |
| 12 | 16¹² | 281474976710656 |
| 11 | 16¹¹ | 17592186044416 |
| 10 | 16¹⁰ | 1099511627776 |
| 9 | 16⁹ | 68719476736 |
| 8 | 16⁸ | 4294967296 |
| 7 | 16⁷ | 268435456 |
| 6 | 16⁶ | 16777216 |
| 5 | 16⁵ | 1048576 |
| 4 | 16⁴ | 65536 |
| 3 | 16³ | 4096 |
| 2 | 16² | 256 |
| 1 | 16¹ | 16 |
| 0 | 16⁰ | 1 |
14行で、16⁰から16¹³まであります。長さは恣意的ではありません。14文字がこの一群の受け付ける最大の入力なので、表は答えが使いうる位をすべて覆って止まります。下へ読むことは答えの位を右から左へ読むことで、最後の行がいちばん右の文字、最初の行がいちばん左になります。真ん中の列は位を累乗として書いたもので、上のパネルの和が掛ける相手です。3列目はその累乗を計算した値で、実際に掛けるときに使う数です。これらの値は2進数のページと重なります。16は2⁴、256は2⁸、65,536は2¹⁶で、16進数の1文字が4ビットを抱えるからです。同じ表が、4ビットの組をビットではなく数として読んだときの重みにも答えるのはそのためです。表は固定で、打ち込んだ数には従いません。
公式
「2A3F」 = 2×16³ + 10×16² + 3×16¹ + 15×16⁰ = 2×4,096 + 10×256 + 3×16 + 15 = 10,815
- 「2A3F」
- 書き換える16進数の数です。文字の大小は区別しないので2a3fと2A3Fは同じ値です。先頭の0は何も変えず、前に付いたマイナス記号は負の結果を生みます。桁は0から9とAからFまでで、それ以外の文字は受け付けません
- 16ⁿ
- ある位に付く16の累乗で、いちばん右の文字を0として数えます。いちばん右は16⁰で1、その次は16¹で16、左へ1つ動くごとにまた16倍になります
- 2、10、3、15
- 文字を値として読んだもので、文字はすでに置き換わっています。Aは10、Fは15へ、何かを掛ける前に変わります。Aを1として読むのが、この行が防ぐためにある間違いで、この変換がいちばんよく狂う形でもあります
- 2×4,096
- 和の1つの項です。文字の値にその位の累乗を掛けたものです。0である文字も含めてどの文字も項を1つ寄与しますが、0の項は何も変えないので、印字される和からは省かれます
- = 10,815
- 各項の合計です。これは別の基数の桁の並びではなく10進数の数なので、このページの答えはそのまま次の計算に使えます
- 14文字
- 受け付ける入力の最大幅で、それは1FFFFFFFFFFFFFにあたります。14文字は値が9007199254740991に届く長さで、そこを超えると機械は隣り合う整数を見分けられません。長すぎる入力は変換せずに拒否します
機械のために書かれた数を人のために書かれた数と比べるとき、16進数の値を10進数として読むことになります。色コードは2文字ずつのチャンネル3つで、FFが255、80が128だと知っていることは、色合いを目で合わせるのと数で合わせるのの違いになります。寸法も同じ話です。16進数の400は1,024で、これは見慣れたページの大きさですし、メモリマップに「0x100000」と印字されていれば、そこに2つ目の領域を足す人にとっては1,048,576バイトです。チェックサムを確かめる人、ハッシュの先頭を見比べる人、データシートのマスクを変換する人もこの変換を行います。16進数だと分かったシリアル番号や識別子を読む人も同じです。課題では16進数を10進数に変換せよという形で、ふつうは累乗を書き添えて問われます。下の表とこのページが印字する和がまさにその形で、1文字につき1項、文字はすでに置き換わっています。別のツールが出した16進数の答えを素性確認したいときにも手が伸びる変換です。10進数の合計は、ほかのすべてと見比べられる唯一の数だからです。
計算例
「2A3F」を読む
- 4つの文字の下に、右から順に16の累乗を書く:1、16、256、4,096
- 文字をその値に置き換える:Aは10、Fは15
- それぞれ掛ける:2×4,096は8,192、10×256は2,560、3×16は48、15×1は15
- 4つの項を足す:8,192 + 2,560 + 48 + 15 = 10,815
既定値で、2つの文字をどちらも変換する例です。Aは1ではなく、Fは5でもありません。文字を数字として読んでしまうと答えはおよそ2千になり、違いは明らかです。もっと気づきにくい間違いは、文字は正しく変換したのに違う累乗を掛けてしまう場合です。
1バイトを埋める、FF
- 2文字なので、位の値は16と1である
- Fは15なので、左の文字は15×16 = 240を寄与する
- 右の文字は15×1 = 15を寄与する
- 240 + 15 = 255
2文字で表せる最大の値です。FFが256ではなく255なのは、範囲が00から始まるからです。この組はそのまま覚えておく価値があります。色の値、バイト幅の欄、ちょうど2文字の16進数ならどこでも出てきます。
「B2」を読む
- Bは11なので、左の文字は11×16 = 176を寄与する
- 右の文字は2を寄与する
- 176 + 2 = 178
BはAの1つ上なので、10×16ではなく11×16になります。Bを11と読むか10と読むかの違いは16で、それは16進数の位1つ分です。2進数のページが8ビットの例に使っているのと同じ値で、「10110010」は2を基数で書いたときの姿です。
最大の入力、1FFFFFFFFFFFFF
- 14文字なので、位は16¹³から16⁰まで並ぶ
- 先頭の1は16¹³の値を持ち、それは4503599627370496である
- 13個のFはそれぞれ15で、自分の位の累乗が掛かる
- 14個の項を足すと9007199254740991になる
14項はこの和がいちばん長くなる場合で、10進数のページが9007199254740991で、2進数のページが53桁で当たるのと同じ上限です。この大きさでも方法は何も変わりません。同じ掛けて足すを14回繰り返すだけで、そこがこの例から持ち帰る価値のあるところです。
適用限界
ここでの入力は10進数ではなく16進数の文字列なので、拒否すべき小数点はありません。0から9までとAからFまでの外の文字は拒否します。入力は最大14文字で、それは1FFFFFFFFFFFFFにあたり、それより長いものは切り詰めずメッセージを付けて拒否します。先頭の0は受け付けて何も変えず、前に付いたマイナス記号は負の10進数の結果を生みます。和は桁について計算し、符号は合計に掛かります。入力では大文字と小文字を区別しませんが、位の値の和は常に大文字で印字されます。下の表は16⁰から16¹³までの16の累乗を並べた固定のもので、打ち込んだ数には従いません。どの位がどれだけの重みかを見るために置かれています。反対の向き、つまり10進数から16進数へ行くのは別のページで、このページは印字する和のほかに結果へ何の計算もしません。
よくある質問
- 16進数から10進数へ手で変換するにはどうするか
- 文字の下に16の累乗を書きます。右端を1として、左へ1つ動くごとに16倍にしていきます。次に各文字をその下の累乗に掛け、結果を足します。文字は先に置き換えなければなりません。Aは10、Bは11、Cは12、Dは13、Eは14、Fは15です。「2A3F」なら2×4,096 + 10×256 + 3×16 + 15となり、これは10,815です。
- AからFまでの文字は何を意味するのか
- 10から15までの値が順に対応しています。Aは10、Bは11、Cは12、Dは13、Eは14、Fは15です。16を基数とする表記には16個の1文字が要るのに、10進数の数字は10個しかないので、記号が6個足りません。文字がその合意された慣例です。どの文字も数字とまったく同じように係数なので、Fはその位の重みの15倍の値を持ちます。最後の位なら15、1つ左の位なら240です。
- ここで変換できるいちばん長い16進数は何か
- 14文字です。1FFFFFFFFFFFFFが上限で、変換すると9007199254740991になります。10進数のページが53桁の2進数として述べているのと同じ境目です。長すぎる文字列は切り詰めも丸めもせず、メッセージを付けて拒否します。その幅を超えると機械は隣り合う整数を区別できず、答えを信じられないからです。
- FFが256ではなく255なのはなぜか
- 数え始めが01ではなく00だからです。16進数の2文字は00からFFまでの256通りの文字列を作るので、表せる最大の値は255で、場合の数より1つ小さいのです。同じ1つ違いは2進数にも現れます。1バイトは8ビットで0から255までなので、バイトを持つどの言語でも最大値は255です。
- 16進数から10進数は、16進数から2進数と同じことか
- 違います。2進数への変換は計算を要さない置き換えです。各文字が4ビットになり、それで方法の全体です。10進数への変換は位が2の累乗ではなく16の累乗の重みを持つので、重み付きの和になります。「2A3F」は2×4,096 + 10×256 + 3×16 + 15で、何かを掛ける前に文字を値へ変えなければなりません。同じ文字列の2進数の答えは「10101000111111」で、2つの答えは同じ量を2通りに書いたものです。
- 16の累乗を表にしているのはなぜか
- 累乗は和のどの項にも掛かる重みで、その場で計算するより引くほうが速いからです。表は16⁰から16¹³までで、このページにとって網羅的です。14文字が受け付ける最大の入力なので、受け付けられた答えが表にない位を使うことはありません。結果パネルの和の隣で表を読むと、どの文字がどの重みを持つかが分かります。16進数の1文字は4ビットなので、この重みは2進数のページの4桁分と同じ値です。
参考文献
- Hexadecimal — 16を基数とする数体系、10から15までの値としての文字AからF、および10進数との相互変換 — Wolfram MathWorld (United States)
- Number base — 数字の値がその位置と基数で決まる理由、および同じ量が複数の基数でどう書かれるか — Wolfram MathWorld (United States)
- Powers of two — 16の累乗がその4つおきの項にあたる1、2、4、8…の数列。OEIS A000079として収録されている — OEIS Foundation Inc. (United States)
- 教育部关于印发义务教育课程方案和课程标准(2022年版)的通知——この通知の添付資料リストの第5項が《义务教育数学课程标准(2022年版)》にあたる。進位制と異なる進法の間の換算は課標の数と代数の領域の内容で、原文と学段の要求はこの添付による — 中华人民共和国教育部