2進数→16進数変換
計算結果
16進数
- 4桁ごとに区切った値
- 1011 0010
2進数から16進数への変換ツールは、数を2を基数とする表記から16を基数とする表記へ書き換えます。この一群の変換のうちでいちばん簡単です。実際には何も計算しないからです。16進数の1桁は2進数のちょうど4桁を抱えているので、仕事の全体は2進数の文字列を右から4つずつの組に区切り、各組を1桁として読むことだけです。「10110010」は「1011」と「0010」に分かれ、それぞれBと2なので、答えはB2です。この4対1の決まった関係が16進数という基数が存在する理由そのものです。1バイトは8ビットなので16進数でちょうど2桁、16ビットのアドレスはちょうど4桁になります。プログラマが機械語や色の値やメモリアドレスを2進数ではなくこの基数で書くのはそのためです。このページが答えの下に印字するのは、使った区切りそのものです。区切りがこの変換だからです。桁数が4の倍数でないときは、いちばん左の組が4桁になるように0で埋めます。「10110」は「0001 0110」になり、これは16です。この0は値を変えず、変えるのは区切りだけです。
16通りある4ビットの組と、それぞれが表す16進数の桁
| ニブル | 16進数の桁 | 10進数 |
|---|---|---|
| 0000 | 0 | 0 |
| 0001 | 1 | 1 |
| 0010 | 2 | 2 |
| 0011 | 3 | 3 |
| 0100 | 4 | 4 |
| 0101 | 5 | 5 |
| 0110 | 6 | 6 |
| 0111 | 7 | 7 |
| 1000 | 8 | 8 |
| 1001 | 9 | 9 |
| 1010 | A | 10 |
| 1011 | B | 11 |
| 1100 | C | 12 |
| 1101 | D | 13 |
| 1110 | E | 14 |
| 1111 | F | 15 |
変換の全体がここに書き出されています。存在する4ビットの組がすべて1回ずつ現れるので、使うときに何かを計算する必要はありません。表は閉じていて、一度目を通した読み手は、どんな2進数の文字列でも4つずつに切って1つずつ引けばこの基数で読めます。上の入力から導かれるのではなく固定なので、数が変わっても変わらず、両者が食い違って見えても矛盾ではありません。パネルは打ち込まれたものに答え、表は16個の組が何であるかという一般的な問いに答えます。真ん中の列を下へ読むと0からFまで隙間なく数えており、そこが要点です。文字は暗号ではなく、9より先の数字の続きです。いちばん左の列を下へ読むと、2進数でちょうど同じだけ増えていき、対応が機械的になるのはそのためです。表が「1111」で止まるのは、そこで16進数の1桁が終わるからです。次の値には2桁目が要り、それは上のページがすでに行っている組み替えそのものです。
公式
「10110010」 = 「1011 0010」 = B2
- 2進数
- 書き換える対象の数で、2を基数として書かれています。変換によって変わるものは何もなく、同じ値が違う桁の組で書かれるだけです
- ニブル
- 2進数の4桁を1つにまとめた組です。この変換が動く単位で、ニブルはちょうど16通りあり、16を基数とする数が2進数と組になるのはまさにそのためです
- 0–9、A–F
- 16個ある16進数の桁で、ニブル1つに1つが対応します。10個はなじみのある数字で、残りの6個はAからFまでの文字で、10から15までを表します
- ゼロ埋め
- 桁数が4の倍数でないとき、最初の組の左に足す0です。変わるのは区切りで、値は決して変わりません。「10110」と「00010110」が同じ数の2通りの書き方なのはそのためです
- 右から
- 区切る向きです。組は右端から作ります。そこが一の位だからで、10進数で千の位を区切っていくのとまったく同じです
- 53ビット
- 入力できる長さです。2進数で53桁、10進数では9007199254740991にあたり、反対側では16進数で14桁になります。機械が隣り合う整数を見分けられなくなる幅なので、それより長い入力は丸めるのではなく拒否します
この変換は、変換だと思わずにいちばんよく行われている変換です。デバッガでバイトを読む、色の値を確かめる、サブネットマスクを求める、ハッシュの先頭を解読する、デバイスのレジスタダンプを読む、ログの中の2つのフラグを見比べる。どれもビットが真実で、16進数がそれが印字される形である場合で、この2つの見方を行き来することは低水準の仕事では定数です。向きは両方の意味で重要です。ハードウェアのデータシートはレジスタを16進数の値として与えるので、確かめたいビットはそれを展開して見つけます。一方、オシロスコープの波形やビットパターンの問題は2進数で届くので、資料が使っている形に書き直す必要があります。学生にとっては、長い2進数を手に負えるものにする近道です。16桁の2進数の並びは読めませんが、その4桁の16進数は読めます。関係が4対1であること、つまり何かを計算して求めるものではないと知っていれば、その作業から計算が丸ごと消えます。このページが区切りを印字するのは、近道を主張するのではなく目に見える形にするためで、だから手でやった変換の置き換えにも、その点検にも使えます。
計算例
「10110010」を書き換える
- 文字列を右から4つずつの組に切る:「1011」と「0010」
- 最初の組を読む:「1011」は8 + 2 + 1 = 11で、Bである
- 2つ目の組を読む:「0010」は2で、2である
- 2桁を合わせてB2になる
既定値で、しかも1バイトなので組が割り切れます。B2はこの値がデバッガやデータシートの中で現れる形です。8ビットはその下にそのまま残っていて、だから区切りは暗黙にせず答えの隣に印字されます。
ニブル1つの場合:「1111」
- 4桁はすでにちょうど1組である
- 「1111」は8 + 4 + 2 + 1 = 15である
- 15は16進数でFと書く
- 答えは1桁で、Fである
いちばん大きなニブルで、文字がなぜそこで尽きるかを示します。15は4ビットが持てる最大の値なので、Fはこの基数の最後の桁です。1つの16進数の桁ではこれ以上広い値は書けません。そしてそれこそが利用されている性質です。
短い入力を埋める:「10110」
- 5桁は4で割り切れないので、右から始める:「0110」が1つの組になる
- 左に1桁残るので、4桁になるまで埋める:「0001」
- 「0001」は1、「0110」は6で、2桁の16になる
- 示される区切りは「0001 0110」で、入力より2桁長い
間違いに見えて間違いでない場合です。16進数の桁は4ビット幅で、最後の組はその幅まで埋めなければならないので、出力の区切りは入力より長くなります。「10110」と「00010110」は同じ数で、埋めたことで2桁目の読み方が成り立ちます。埋めなかったら、残った1桁は対応する先を失います。
負の値「-10110」
- マイナス記号は数の外側にあるので、いったん脇に置いて「10110」を変換する
- 「10110」は「0001 0110」に組み替えられ、16と読める
- 両方の読みに符号を戻す:-16
符号は両方の出力で桁の外側に残ります。畳み込むには畳み込む先の固定幅が要りますが、ここにはありません。プロセッサがこの値を8ビットに保存するなら、幅が8であることに全面的に依存した1と0の並びを書くことになります。16進数の読みが符号を保つのは、2進数の読みがそうするのと同じ理由です。
適用限界
このページは整数の2進数だけを書き換えます。2進小数点がないので、小数の入力は変換せずに拒否し、16進数の小数も作りません。入力は最長53桁で、10進数では9007199254740991、反対側では16進数で14桁にあたります。それより長い値は機械が正確に保持できず、近似するのではなく拒否します。入力の先頭の0は受け付けて無視しますが、区切りで足される0は意図して表示します。埋めた出力が入力より広いのはわざとで、誤りではありません。前についたマイナス記号は受け付け、両方の出力に引き継ぎます。整数だけなので、これは読みの変換であって計算ではありません。どちらの基数でも足し算・引き算・掛け算・割り算は下にリンクした計算のページにあり、逆の向き、つまり16進数から2進数へ戻すのは専用のページにあります。
よくある質問
- 打ち込んだより出力が長くなるのはなぜか
- 16進数の桁はちょうど4ビット幅で、いちばん左の組をその幅まで埋めなければならないからです。「10110」のような5桁の入力は、1つの完全な組「0110」と、余った1桁に分かれます。余った1桁は左に0を足して「0001」にします。この0は値を変えません。「10110」と「00010110」は同じ数です。埋めることで最後の組が対応する先を持てます。埋めなければ、余った1桁は表の中で対応するものを失います。
- この変換に計算はあるのか
- ありません。そこが面白いところです。16は2の累乗なので、基数の境目が2進数のちょうど4桁ごとに来ます。だからこの変換は計算ではなく組み替えです。掛け算も足し算も繰り上がりもありません。桁を4つずつに切って、各組を引くだけです。16進数がほかの詰めた表記ではなく使われる理由がこれで、区切りが答えの隣に印字されるのもそのためです。区切りがこの方法そのもので、説明する代わりに見せています。
- 16進数の1桁が4ビットなのはなぜか。3でも5でもないのは
- 4ビットはちょうど16通りの値を持て、16進数の桁はちょうど16種類の記号を持つからです。3ビットなら8通りしかなく、8進数が3と組になるのはそのためです。5ビットなら32通りになり、それを基数に使う例はありません。繰り上がりなしで組み替えが成り立つには対応が正確でなければならず、それができるのは2の累乗だけです。1バイトが8ビットで常に16進数のちょうど2桁になるのも同じ理由です。
- 変換できる2進数はいちばん長くて何桁か
- 53桁で、10進数では9007199254740991、変換後は16進数で14桁になります。この上限はこのページが決めた規則ではなく、機械が数を正確に保持する仕組みの性質です。その幅を超えると隣り合う整数が区別できなくなるので、それより長い入力は忠実に変換できません。丸めるのではなくメッセージを付けて拒否します。ここで丸めると、まったくふつうの16進数の値に見えてしまうからです。
- 小数の2進数も変換できるのか
- このページではできません。2進小数点は受け付けず、16進数の小数も作りません。小数の変換には、何桁まで残すか、最後の1桁をどう丸めるかという追加の判断が要るからです。この一群のページはすべて整数で動くので、同じ入力が片方で受け付けられ、もう片方で拒否されることがありません。その境界の中では変換は正確です。長さの上限までの整数の2進数は、どこにも丸めを伴わずにちょうど1つの16進数の値に対応します。
- 答えの大文字と小文字は区別されるのか
- 答えは常に大文字で印字されます。b2ではなくB2です。ただし両者は同じ値で、どこでも通じます。資料や逆アセンブラやデータシートはほとんど常に大文字を使い、CSSの色の値は慣例として小文字で書かれます。どちらから来た読み手も、見たものを読み取れます。このページが大文字で印字するのは、一群の残りと揃えるためで、ふつう一緒に使われる資料の慣例がそうだからです。
参考文献
- Hexadecimal — 16を基数とする数体系、9より先の桁、および16進数の1桁と2進数の4桁の関係 — Wolfram MathWorld (United States)
- Binary number — 2を基数とする数体系と位取り記法。固定幅の組み替えが成り立つのはこれが理由である — Wolfram MathWorld (United States)
- Nibble — 16進数の1桁が対応する4ビットの組で、この変換が実行される単位 — Wolfram MathWorld (United States)
- 教育部关于印发义务教育课程方案和课程标准(2022年版)的通知——この通知の添付資料リストの第5項が《义务教育数学课程标准(2022年版)》にあたる。2進数・8進数・16進数の間の変換は情報科技の課程の内容で、原文と学段の要求はこの添付による — 中华人民共和国教育部