16進数→2進数変換
計算結果
2進数
- 4桁ごとに区切った値
- 0010 1010 0011 1111
16進数から2進数への変換ツールは、16進数の数を2を基数とする表記に書き換えます。この一群の変換の中で、計算をまったく必要としない唯一のものです。16進数の1桁はちょうど2進数の4桁で、これは特定の数の偶然ではなく、16進数が存在する理由そのものです。だから各文字は自分の4ビットに置き換わり、その間で繰り上がるものは何もありません。2は「0010」、Aは「1010」、3は「0011」、Fは「1111」になるので、「2A3F」は「10101000111111」になります。置き換えの表は16個で、増えることはありません。0は「0000」、1は「0001」と、2進数で数え上がってF、つまり「1111」まで続きます。どの文字も、位に関係なく4ビット分です。桁の重みが置かれた場所で決まる10進数とは違います。引っかかりやすい細部が1つあります。答えの桁は2回印字されます。1回はそのままの並びとして、もう1回は4つずつの組に切ってです。組にした行が長いのは、最初の組が先頭の0で埋められているからです。「2A3F」は14ビットなので、組にした形は「0010 1010 0011 1111」、16文字になり、前に0が3つ足されています。この0は値を変えません。2つ目と3つ目の組の境目を、数えなければ分からないものではなく目に見えるものにするためにあります。小文字の入力も受け付けて正規化します。2a3fと2A3Fは同じ数で同じ答えを生みます。実際に使われる16進数の文字列、つまり色の値やハッシュや識別子は、たいてい小文字で書かれているからです。
「2A3F」の各文字を、それぞれの4桁の2進数に展開したもの
| 16進数の桁 | ニブル | 10進数 |
|---|---|---|
| 2 | 0010 | 2 |
| A | 1010 | 10 |
| 3 | 0011 | 3 |
| F | 1111 | 15 |
4行で、1行につき1文字です。方法の全体がこれで、足すべき5行目も説明すべき繰り上がりもありません。3列目はその文字を数として読んだもので、2列目の4ビットが足し上げるとその値になります。「1010」が10なのは8 + 2だからで、「1111」が15なのは8 + 4 + 2 + 1だからです。2列目を下へ読んでつなげれば2進数の答えになり、3列目を読めば問いが10進数を求めていた場合にやることになります。埋めの規則のために見るべきは1行目です。2は「0010」で、数そのものには要らない先頭の0が付いています。この0があるので、この行もほかの3行と同じく4文字幅になるのです。表は「2A3F」に固定されていて、上のパネルは打ち込まれたものを変換します。
公式
「2A3F」 ⇒ 2 → 「0010」、A → 「1010」、3 → 「0011」、F → 「1111」 ⇒ 「10101000111111」、4桁ずつに区切って「0010 1010 0011 1111」
- 「2A3F」
- 書き換える16進数の数です。文字の大小は区別しないので2a3fと2A3Fは同じ値です。答えは常に大文字で印字されます。このサイトで2進数と16進数を書くときの慣例です
- 1文字
- この変換が働く単位です。各文字はそれだけで扱われ、次の文字へ繰り上がるものは何もありません。16進数を2進数に変換するとき、途中の合計を持たずに左から右へ、どの順でも進められるのはそのためです
- 4ビット
- 各文字が展開する2進数の桁数で、例外はありません。文字が16通り、4ビットの並びも16通りあることが2つの基数を組にしている理由の全部で、だから2進数の答えの長さは必ず文字数のちょうど4倍になります。この4桁のまとまりをニブルと呼びます
- 「0000」から「1111」まで
- 各文字が生みうるものの全体で、0から15まで2進数で数え上げたものです。置き換えの表を書き出したもので、0は「0000」、1は「0001」と続き、9は「1001」、そこからAからFが「1010」から「1111」になります
- ⇒ 「10101000111111」
- 何も挟まずにつなげた桁です。これがこの数そのものの2進数の形で、埋めはしません。先頭の0は落ちるので、上のビットが0である値は文字数の4倍より短く出てきます
- 「0010 1010 0011 1111」
- 同じ桁を4つずつに切ったもので、こちらは埋めがあります。最初の組は「10」ではなく「0010」で、0が3つ足されてどの組も4文字幅になり、境目が16進数の文字とそろいます
- 2⁵³ − 1
- 入力の上限で、ここではなじみの薄い形で現れます。16進数で14文字、それは1FFFFFFFFFFFFF、2進数で53桁、10進数で9007199254740991です。それより長い入力は変換せずに拒否します
16進数は人が書くもので、2進数は機械が実行するものなので、その間を行き来することは、ハードウェアに近い仕事をする人にとって毎日の手順です。「2A3F」のような色コードは16進数4文字で、そのどのビットが立っているかを読むこと、つまりビットマスクやパーミッションフラグやレジスタ設定が実際に尋ねていることは、2進数で見ることにほかなりません。16進数で印字されたハッシュ、チェックサム、ビットフラグも同じように読みますし、デバッガのアドレスやパケットキャプチャのフラグも同じです。逆の向きにも価値があります。2進数は数桁を超えると読めなくなるので、2進数で見つけた値はふつう16進数に書き直してから渡します。それだから別のページになっているのです。課題では16進数を2進数に変換せよという形で出て、置き換え以外に示すべき途中の計算はありません。それでも埋めは書き出しておく価値があります。「10101000111111」という答えと「0010 1010 0011 1111」という答えは同じ数で、見えている構造の量が違うだけだからです。どちらが求められているかは、読み手が値のほうを要るのか、バイトの並びのほうを要るのかで決まります。
計算例
「2A3F」を変換する
- 文字を1つずつ取る:2、A、3、F
- それぞれを4ビットに置き換える:2は「0010」、Aは「1010」、3は「0011」、Fは「1111」
- 4つの組を何も挟まずにつなげる:「10101000111111」
- 同じ桁を4つずつに切って最初の組を埋める:「0010 1010 0011 1111」
既定値で、埋めを示す例です。2つの出力行は長さが違います。14桁と、空白3つを含めた16桁で、これは想定どおりです。1行目は数そのもので、2行目は文字の境目を見えるようにした数です。AとFは変換ではなく置き換えである点も見ておいてください。この手順のどこにも計算はありません。
1バイト、「B2」
- Bは11で、4ビットでは「1011」である
- 2は4ビットでは「0010」である
- つなげると「10110010」で、8桁、2組、1バイトである
16進数の2文字は常に8ビット、つまり1バイトです。この組を覚えておく価値があるのはそのためで、何も数えずに値の幅がそのまま読めます。ここでは組の境目がバイトの切れ目にもうまく重なっていますが、これは2文字という性質であって、この値に固有のものではありません。
小文字の入力、2a3f
- 小文字のaは大文字のAと同じで、どちらも11である
- 小文字のfは大文字のFと同じで、どちらも15である
- 変換は「2A3F」のときとまったく同じに進み、同じ答えを生む
どちらの出力も1つ目の例と1文字も違わずに出てきます。ウェブページやスタイルシートやログから写した16進数の文字列はたいてい小文字なので、どちらの大小文字も受け付けるのは便宜ではなく、小文字を拒めば人が持ち込むまさにその入力でこのページが使えなくなるからです。
最大の入力、1FFFFFFFFFFFFF
- 14文字なので、最初の組を埋めると答えは56ビットになる
- 先頭の1は4ビットの組では「0001」で、埋めが現れるのはここである
- 13個のFはそれぞれ「1111」なので、埋めた答えは1が53個の前に0が3つ付いた形になる
- 埋めなければ、数そのものは1が53個である
上限で、埋めの規則がいちばんはっきり出る場合です。最初の組は1ではなく「0001」なので、組にした行にはそのままの行にはない先頭の0が3つ付きます。同じ限界は、10進数のページに9007199254740991として、数を読むページに53桁として現れます。1つの境目を3つの基数で書いたものです。
適用限界
このページは整数だけを変換し、しかも入力は10進数ではなく16進数の文字列なので、拒否すべき小数点はありません。0から9までとAからFまでの外の文字を拒否します。入力は最大14文字で、それは1FFFFFFFFFFFFFにあたり、それより長い文字列は切り詰めずメッセージを付けて拒否します。切り詰めた答えは答えに見えてしまうからです。先頭の0は受け付けて何も変えず、前に付いたマイナス記号も受け付けます。その場合の埋めは符号を付ける前の桁に掛かるので、組にした行は「1010」に途中で符号が入るのではなく「0010」の前にマイナスが付いた形になります。答えは入力の書き方によらず常に大文字で印字されます。下の表は既定値「2A3F」を展開するもので、打ち込んだ数には従いません。反対の向き、つまり2進数から16進数へ戻すのは別のページで、このページは結果に対して何の計算もしません。
よくある質問
- 16進数の1桁がいつも2進数の4ビットなのはなぜか
- 4も16も2の累乗で、16は2を4回掛けたものだからです。2進数の4桁は2の4乗、つまり16通りの並びを持てて、それは16を基数とする表記が持つ文字の数とちょうど同じです。だから2つの集合はぴったり重なります。どの文字にも4ビットの並びが1つ、どの4ビットの並びにも文字が1つで、どちら側にも余りが出ません。16進数が、たとえば10進数ではなく使われるのはそのためです。10はビットに均等に割り切れません。
- 組にした答えがそのままの答えより長いのはなぜか
- 組にした行は埋めてあり、そのままの行は埋めていないからです。そのままの行は数そのものの2進数の形なので、先頭の0を落とします。組にした行は4ビットの組が整数個でなければならないので、先頭の組を0で埋めます。「2A3F」の場合、前に0が3つ足され、片方は14桁、もう片方は16桁になります。どちらも間違いではなく、同じ値です。値が要るなら1行目、文字の切れ目が見たいなら2行目を使ってください。
- 16進数から2進数へ手で変換するにはどうするか
- 各文字を4ビットに置き換えて、左から右へつなげていきます。10個の数字の4ビットは2進数で数え上げたもので、0は「0000」、1は「0001」、2は「0010」と続き、9が「1001」です。そのあとAが「1010」、Bが「1011」、Cが「1100」、Dが「1101」、Eが「1110」、Fが「1111」です。繰り上がるものも、持ち回る合計もないので、文字はどの順に処理してもかまいません。
- 文字を大文字で打つか小文字で打つかで違いはあるか
- ありません。2a3fと2A3Fは同じ数で、どちらも「10101000111111」に変換されます。答えは常に大文字で印字されます。技術文書でどちらの基数にも使われるふつうの慣例です。小文字の入力を受け付ける価値があるのは、人が写す16進数の文字列、つまりスタイルシートの色の値やハッシュやログの識別子が、たいていその形で書かれているからです。
- ここで変換できるいちばん長い16進数は何か
- 14文字です。1FFFFFFFFFFFFFが上限で、変換すると1が53個並びます。長すぎる文字列は短くせず、メッセージを付けて拒否します。この限界はこのページ固有のものではありません。10進数のページが9007199254740991として、数を読むページが53桁として述べているのと同じ境目です。それより広い値では機械が隣り合う整数を区別できなくなるので、その先の答えは信じられません。
- 16進数から2進数への変換は、16進数から10進数への変換と同じことか
- 違います。ただしどちらも同じ文字列から始まるので混同しやすいです。2進数への変換は置き換えで、各文字が4ビットになり、計算は起きません。10進数への変換は和で、各文字にその位が持つ16の累乗を掛けます。「2A3F」は2×4,096 + 10×256 + 3×16 + 15で、項を足し合わせます。基数が2の累乗だから2進数のページは速く、10進数のページはそうではありません。
参考文献
- Hexadecimal — 16を基数とする数体系、文字AからF、および16進数の1桁がちょうど2進数の4桁である理由 — Wolfram MathWorld (United States)
- Binary number — 位取り記法、位の値、および4ビットの組が数え上がっていく2の累乗 — Wolfram MathWorld (United States)
- Powers of two — 4ビットの組が上から下まで覆う1、2、4、8…の数列。OEIS A000079として収録されている — OEIS Foundation Inc. (United States)
- 教育部关于印发义务教育课程方案和课程标准(2022年版)的通知——この通知の添付資料リストの第5項が《义务教育数学课程标准(2022年版)》にあたる。進位制と異なる進法の間の換算は課標の数と代数の領域の内容で、原文と学段の要求はこの添付による — 中华人民共和国教育部