メインコンテンツへスキップ
CalcMax

16進数→10進数変換

計算結果

10,815

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の累乗値
1316¹³4503599627370496
1216¹²281474976710656
1116¹¹17592186044416
1016¹⁰1099511627776
916⁹68719476736
816⁸4294967296
716⁷268435456
616⁶16777216
516⁵1048576
416⁴65536
316³4096
216²256
116¹16
016⁰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進数の合計は、ほかのすべてと見比べられる唯一の数だからです。

計算例

  1. 「2A3F」を読む

    1. 4つの文字の下に、右から順に16の累乗を書く:1、16、256、4,096
    2. 文字をその値に置き換える:Aは10、Fは15
    3. それぞれ掛ける:2×4,096は8,192、10×256は2,560、3×16は48、15×1は15
    4. 4つの項を足す:8,192 + 2,560 + 48 + 15 = 10,815

    既定値で、2つの文字をどちらも変換する例です。Aは1ではなく、Fは5でもありません。文字を数字として読んでしまうと答えはおよそ2千になり、違いは明らかです。もっと気づきにくい間違いは、文字は正しく変換したのに違う累乗を掛けてしまう場合です。

  2. 1バイトを埋める、FF

    1. 2文字なので、位の値は16と1である
    2. Fは15なので、左の文字は15×16 = 240を寄与する
    3. 右の文字は15×1 = 15を寄与する
    4. 240 + 15 = 255

    2文字で表せる最大の値です。FFが256ではなく255なのは、範囲が00から始まるからです。この組はそのまま覚えておく価値があります。色の値、バイト幅の欄、ちょうど2文字の16進数ならどこでも出てきます。

  3. 「B2」を読む

    1. Bは11なので、左の文字は11×16 = 176を寄与する
    2. 右の文字は2を寄与する
    3. 176 + 2 = 178

    BはAの1つ上なので、10×16ではなく11×16になります。Bを11と読むか10と読むかの違いは16で、それは16進数の位1つ分です。2進数のページが8ビットの例に使っているのと同じ値で、「10110010」は2を基数で書いたときの姿です。

  4. 最大の入力、1FFFFFFFFFFFFF

    1. 14文字なので、位は16¹³から16⁰まで並ぶ
    2. 先頭の1は16¹³の値を持ち、それは4503599627370496である
    3. 13個のFはそれぞれ15で、自分の位の累乗が掛かる
    4. 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桁分と同じ値です。

参考文献

関連する計算ツール