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

10進数→16進数変換

計算結果

2A3F

16進数

各位の値
2×4096 + 10×256 + 3×16 + 15

10進数から16進数への変換ツールは、整数を10を基数とする表記から16を基数とする表記へ書き換えます。方法は2進数を作るときと同じ繰り返しの割り算で、2のかわりに16を使います。数を16で割って余りを残し、その商をまた16で割り、商が0になるまで続けます。変わるのは文字のほうです。2で割った余りは0か1しか出ませんが、16で割った余りは0から15までのどれでもあり得て、16進数はその10から15までの値をAからFまでの文字で書きます。Aが10、Bが11、Cが12、Dが13、Eが14、Fが15です。つまり余りはそのまま16進数の桁になるのではなく、数として出てきます。9より大きい余りは、答えが書き上がる前にすべて対応する文字へ置き換えなければなりません。10,815を例に取ると、10,815 ÷ 16は675余り15、675 ÷ 16は42余り3、42 ÷ 16は2余り10、2 ÷ 16は0余り2です。余りを下から読むと2、10、3、15で、これを2、A、3、Fに置き換えるので、10,815は16進数で2A3Fになります。文字こそがこのページの主題です。答えの隣に印字される位の値の和は、同じ数を反対の端から見せています。16進数では位が4,096、256、16、1の値を持ち、2A3Fは2×4,096 + 10×256 + 3×16 + 15で、足し戻すと10,815になります。16進数が使われるのは、16進数の1桁が2進数のちょうど4桁だからで、だから1バイトは常に2文字、32ビットの値は常に8文字になります。色コード、メモリアドレス、ハッシュがこの書き方なのはそのためです。

10,815を16で割り、商が0になるまでを1回ずつ

回割り算商余り
110815 ÷ 1667515 (F)
2675 ÷ 16423
342 ÷ 16210 (A)
42 ÷ 1602

この梯子の4つの余りのうち2つは、数とその文字を括弧で並べた形で書かれています——15(F)と10(A)です。この二重の形こそがこの表の存在理由です。計算が与えるのは15で、答えが要るのはFです。正しく割ったうえで余りの列をそのまま写すと、2A3Fではなく「2103」と書いてしまいます。この変換が招く間違いはそれだけです。列を下から読むと答えの文字が順に現れます。2、10、3、15で、9より大きい2つを置き換えれば2A3Fです。表は10,815に固定されていて、上のパネルは打ち込まれたものを変換します。表が示しているのは結果ではなく手順だからです。商は各回で約16分の1になるので、許される最大の入力でも梯子は14行しかありません。それは16進数の上限1FFFFFFFFFFFFFの長さそのものです。

公式

「10815」 ÷ 16 = 675余り15 → 675 ÷ 16 = 42余り3 → 42 ÷ 16 = 2余り10 → 2 ÷ 16 = 0余り2 ⇒ 「10815」 = 2A3F = 2×4,096 + 10×256 + 3×16 + 15

「10815」
書き換える整数で、10を基数として書かれています。小数点も桁区切りのコンマも丸めるのではなく拒否します。本文では読みやすさのために10,815と書いていますが、入力欄には区切りを入れずに「10815」と打ち込んでください
÷ 16
繰り返す手順で、このページが使う16が2進数の版の2に取ってかわります。16は書き換え先の基数なので、各回は16がいくつ入るかと、何が残るかを尋ねることになります
商
次の回へ引き継がれる部分です。商が0になったところで手順は止まり、それは答えにもっと上の位は要らないという合図です
余り
その回が生む桁で、ここでは0か1だけでなく0から15までのどれでもあり得ます。商と余りのどちらが桁でどちらが次に引き継がれるかを取り違えるのが、この変換でいちばんよくある間違いです。余り15は桁の15ではありません。16進数にはそれを書く1文字がないからです
A–F
10から15までの値を表す文字で、Aが10、Bが11、Cが12、Dが13、Eが14、Fが15です。別に覚える記法ではありません。それぞれが、10進数の1文字では書けなかった数そのものにすぎないからです
⇒ 2A3F
下から順に組み立てた桁で、9より大きい余りはこの時点ですでに対応する文字になっています。最初に求めた余りが答えのいちばん右の文字なので、書いた順に回を読むと答えは逆になります
2×4,096 + 10×256 + 3×16 + 15
答えを位の値として読み戻したものです。2進数と違い係数がすべて1とは限らず、これが文字を間違った数に置き換えた場合を捕まえる点検になります。Aを10以外の数に取れば和が変わるからです

16進数は技術者が読むための略記なので、値が2つの表記の間を移動するたびにこの変換が要ります。色コードがいちばん日常的な例です。0から255までのチャンネルは16進数でちょうど2文字になるので、色は6文字で書かれ、デザイナーが10,815と言い、開発者が2A3Fと書く同じ色になります。メモリアドレス、チェックサム、ハッシュ、データシートのレジスタ値も同じ理由で16を基数として印字されます。1文字が4ビットなので、値の幅が一目で読めるからです。スタックトレースやパケットダンプを読む人は、この変換を逆の向きに1時間に何十回も行っています。マスクやマジックナンバーを書く人はこの向きに行っています。16で割る手順がこのページの中心で、下の梯子はその1回1回を1行ずつ並べたものです。課題では「10進数を16進数に変換し、途中の計算も示せ」という形で直接問われることも多く、梯子はそのまま答案の形になります。値の幅がはっきりする段でもあります。2文字は1バイト、8文字は32ビットの語なので、この変換はその値が移り先の形式で何文字を占めるかという問いにも答えます。文字を覚える手間もこの段で消えます。AからFまでの6文字は、9より大きい余りに名前を付けただけのものだからです。

計算例

  1. 10,815を16進数で書く

    1. 10,815 ÷ 16 = 675、余り15。15を書き、それはFである
    2. 675 ÷ 16 = 42、余り3
    3. 42 ÷ 16 = 2、余り10。10はAである
    4. 2 ÷ 16 = 0、余り2。商が0になったので止める
    5. 余りを下から読むと2、10、3、15
    6. 10をA、15をFに置き換える。答えは2A3F

    既定値で、2つの置き換えをどちらも示す例です。4つの余りのうち2つが文字を必要とするのは、運が悪いのではなくふつうのことです。9より大きい余りは16回に6回ほど現れ、3、4文字の答えにはたいてい1つ入ります。

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

    1. 255 ÷ 16 = 15、余り15。Fと書く
    2. 15 ÷ 16 = 0、余り15。ここもFと書く
    3. 商が0になったので、2つの余りを下から読む。FF

    1バイトが持てる最大の値が2文字に収まります。16進数が存在する理由がここです。FFと255の組は覚えておく価値があります。色チャンネルの上限で、多くの言語の符号なしバイトの上限で、生データ1文字分の量でもあります。

  3. 16の累乗、1,048,576

    1. 1,048,576 ÷ 16 = 65,536、余り0
    2. 65,536 ÷ 16 = 4,096、余り0
    3. 4,096 ÷ 16 = 256、余り0
    4. 256 ÷ 16 = 16、余り0
    5. 16 ÷ 16 = 1、余り0
    6. 1 ÷ 16 = 0、余り1。下から読むと「100000」

    2進数のページにある2の累乗の例に対応する、16進数の例です。基数の累乗は1のあとに0が並ぶ形になります。1,048,576は16⁵で、2²⁰でもあります。そこがこの表記の要点で、同じ値が2進数では「100000000000000000000」、16進数では「100000」になり、2つ目は読めます。

  4. 負の数

    1. マイナス記号は変換されずに引き継がれます。桁の部分は1つ目の例と同じです
    2. 10,815 ÷ 16 = 675、余り15。あとは0余り2まで同じ
    3. 下から読んだ桁は2、A、3、F
    4. 符号を前に付ける。-2A3F

    前に付いたマイナス記号は受け付け、前に付けたまま印字します。位の値の和は括弧でくくられるので、マイナスはその最初の項ではなく和の全体に掛かります。これが何でないかも書いておきます。これは絶対値に符号を付けた読みであって、機械が保存する2の補数のビット列ではありません。負の値のレジスタの中身が要るなら、それは別の問いで別のページです。

適用限界

このページは整数だけを変換するので、小数点は丸めるのではなく拒否します。10,815.5はここでは変換できません。桁区切りのコンマも拒否します。コンマは言語によっては小数点だからで、2つの読み方を推測するより、そのまま打ち込んでもらうほうが確かです。本文では読みやすさのために10,815と書いていますが、入力欄には区切りを入れずに「10815」と打ち込んでください。入力は最大9007199254740991で、16進数では14文字、その形は1FFFFFFFFFFFFFです。2進数のページに現れる53桁と同じ上限で、1つの限界を2つの基数で書いたものです。先頭の0と前に付いたマイナス記号はどちらも受け付けます。マイナスは絶対値に符号を付けた読みを生むのであって、2の補数のビット列ではありません。下の表は10,815の梯子を印字するもので、打ち込んだ数には従いません。反対の向き、つまり16進数から10進数へ戻すのは別のページで、このページは結果に対して何の計算もしません。

よくある質問

10進数から16進数へ手で変換するにはどうするか
16で割って余りを書き、その商をまた16で割る、という手順を商が0になるまで繰り返します。余りは下から読み、9より大きい余りはすべて文字に置き換えます。10はA、11はB、12はC、13はD、14はE、15はFです。10,815なら余りは上から15、3、10、2と出るので、逆から読んで置き換えると2A3Fになります。
16進数で文字を使うのはなぜか
16を基数とする表記には16個の1文字が要るのに、10進数の数字は10個しかないからです。足りない6個の記号はどこからか持ってくるしかなく、文字を使うのがどの体系も合意している慣例です。Aが10、Fが15なので、この表記の桁は0から9のあとにAからFと続きます。これは変換とは別に覚えるものではありません。文字は、10進数の1文字に収まらなかった余りに付いた名前でしかないのです。
ここで変換できるいちばん大きな10進数はいくつか
9007199254740991で、16進数では1FFFFFFFFFFFFF、14文字です。この上限は2進数のページの53桁と同じところから来ています。同じ数を2つの基数で書いただけだからです。それより大きい値は変換せず、メッセージを付けて拒否します。その幅を超えると機械は隣り合う整数を区別できず、変換した答えを信じられないからです。
16進数は2進数を短くしただけのものか
同じ値を、2の累乗を基数とする表記で書いたものです。だから2つの間の移動がこれほど簡単なのです。16進数の1文字はちょうど2進数の4桁なので、2A3Fは「0010 1010 0011 1111」となり、余りは出ません。これはこの例だけの偶然ではありません。どんな16進数でも成り立ち、それが16進数が使われる理由です。変換で何かが失われることも、丸めが要ることもありません。
小数部分のある10進数も変換できるのか
ここではできません。このページは整数を取るので、10,815.5は丸めるのではなく拒否します。16を基数とする小数はきちんと定義できます。小数点より右の位は16分の1、256分の1という値になります。しかしそれを受け付けるには、何文字まで残すか、最後の1文字をどう丸めるかを決めなければならず、この一群のページはどれも整数を変換します。
16進数の数だけでなく位の値の和も印字するのはなぜか
置き換えの間違いを捕まえる点検になるからです。余り15を違う文字にしてしまった場合、あるいはFが要るところでAを使った場合、印字された和は最初の数に足し戻せません。2×4,096 + 10×256 + 3×16 + 15が10,815になるのは、文字が正しく読まれたときだけです。2進数の版の和と違い係数がすべて1ではないので、答えの1文字1文字が別々に勘定に入ります。

参考文献

関連する計算ツール