16進数(十六進法)とは:基礎知識、表記法と10進数⇔16進数変換
16進数(十六進法)の基礎から表記法・10進数⇔16進数の変換手順まで、図解と例でわかりやすく解説。エンジニア・初心者必見。
16進数(十六進法)は、基数が16の数値表記体系です。英語では「hexadecimal(ヘキサデシマル)」、略してhex(ヘックス)と呼ばれることが多く、日本語でも「16進法」「16進数」「ヘックス」と表記されます。通常は16種類の記号を使い、0~9の数字に加えて、10~15を表すために アルファベットの A、B、C、D、E、F を用います。これは、16の記号(ベース16)で構成された数字体系であるためです。
なぜコンピュータで使うのか
人間は普段、10進数を使います(指が10本あることが一因とされます)。一方、コンピュータは内部で0と1の2種類の状態(2進数)だけを扱います。長い2進数の列を人間が直接読むのは大変なので、エンジニアはビットをまとまり(グループ)で扱います。現代のコンピュータでは4ビットの塊を1つの単位として扱うことが多く、4ビットで表せる16通りの値と対応させるのに便利なのが16進数です。コンピュータの専門用語で、4ビットは1 ニブル(nybble)と呼ばれ、ニブル1つが16進数の1桁に相当します。ニブル2つで1 バイト(8ビット)になります。
16進数の桁と値の対応
16進数の1桁は次のように対応します。
- 0 = 0
- 1 = 1
- 2 = 2
- 3 = 3
- 4 = 4
- 5 = 5
- 6 = 6
- 7 = 7
- 8 = 8
- 9 = 9
- A = 10
- B = 11
- C = 12
- D = 13
- E = 14
- F = 15
16進数の各桁は位置によって 16 のべき乗(16^0, 16^1, 16^2, ...)を係数として重みづけされます。たとえば 0x1A3 (あるいは 1A3h)は次のように10進数に変換できます:
1×16^2 + A(=10)×16^1 + 3×16^0 = 1×256 + 10×16 + 3 = 256 + 160 + 3 = 419
16進数と2進数の関係(ビットとの対応)
各16進桁は4ビット(ニブル)に対応するため、2進数と16進数の相互変換が簡単になります。いくつかの例を示します:
- 0 = 0000
- 1 = 0001
- 2 = 0010
- 3 = 0011
- 4 = 0100
- 5 = 0101
- 6 = 0110
- 7 = 0111
- 8 = 1000
- 9 = 1001
- A = 1010
- B = 1011
- C = 1100
- D = 1101
- E = 1110
- F = 1111
16進数 ⇔ 10進数 の変換方法
16進数 → 10進数(例:0x63)
各桁にその位置の16のべき乗を掛けて足し合わせます。0x63 は 6×16^1 + 3×16^0 = 6×16 + 3 = 96 + 3 = 99(10進数)です。よって、63h と 0x63 は16進数の63(10進数では99)を意味します。
10進数 → 16進数(例:10進数255 を16進数に変換)
- 255 ÷ 16 = 15 余り 15 → 余り15はF。
- 15 ÷ 16 = 0 余り 15 → これもF(上位桁)。
- よって 255(10進) = 0xFF(16進)。
表記法の違いと注意点
- 一般的な表記:先頭に「0x」を付ける(例:0x1A3)。多くのプログラミング言語で標準的です。
- アセンブリ言語などでは末尾に「h」を付けることがある(例:1A3h)。ただし、先頭が数字で始まる場合は混同を避けるために先頭に0を付けたりする慣習があります(例:0FFh)。
- 大文字・小文字は区別されないことが多く、0x1a3 と 0x1A3 は同じ値です。
- 一部の言語や環境では別の表記(例えば先頭に「$」を付ける)を使うこともあります。使う環境の規則を確認してください。
応用上のポイント
- メモリアドレスや色コード(CSSの #RRGGBB)、ビットマスクの表示などで16進数がよく使われます。
- 符号付き整数を16進で表すときは、通常は内部表現(たとえば2の補数)をそのまま16進で表示します。たとえば8ビットの-1は内部的に11111111(二進)=0xFF(16進)です。
- 小数部分(負数や小数)も16進で表すことは可能ですが、慣用的にはあまり使われません(浮動小数点の内部表現は別途規格に従います)。
まとめると、16進数はコンピュータの2進データを人間が読みやすく表現するために便利な表記法であり、4ビットごとに1桁で対応させられるため、2進数との変換が簡単です。表記には「0x」や「h」などの慣習があるので、文脈に応じて使い分けましょう。
16進数の値
16進数は、それぞれが2進数と簡単に比較できるため、8進数(ベース8)と似ています。16進数は4ビットの2進数コーディングを使用しています。これは、16進数の各桁が2進数の4桁と同じであることを意味します。八進数は3ビットの2進法を使用しています。
10進法では、最初の桁が1の位、左の次の桁が10の位、その次が100の位などとなります。16進法では、各桁は10ではなく16の値をとることができます。つまり、桁には1の位があり、16の位があり、次の桁が256の位になります。なので、1h=10進数では1h、10h=16進数では10h、100h=256となります。
16進数を2進数、8進数、10進数に変換した値の例。
|
変換
2進数から16進数へ
2進数から16進数に変更するには、グループ化の方法を使います。2 進数は、右から順に 4 桁のグループに分割されます。16進数から変更するには、逆の操作を行います。16進数はそれぞれ2進数に変更され、通常はグループ化が解除されます。
| バイナリ | グループ化 | 六角 | |||
| 01100101 | 0110 | 0101 | 65 | ||
| 010010110110 | 0100 | 1011 | 0110 | 4B6 | |
| 1101011101011010 | 1101 | 0111 | 0101 | 1010 | D75A |
2進数のビット数が4の倍数でない場合は、そのようにするためにゼロを入れています。例としては、以下のようなものがあります。
- 2進数110=0110で、6進数になります。
- バイナリ 010010 = 00010010 となり、12 Hexになります。
16進数から10進数へ
16進数から10進数に変換するには、2つの一般的な方法があります。
最初の方法は、手動で変換する場合の方が一般的です。
- 16進数の各桁の10進数を使います。0~9の場合は同じですが、A=10、B=11、C=12、D=13、E=14、F=15となります。
- 以下の各ステップで変換した数字の合計を保管してください。
- 16進数の最下位の数字から始めてください。それが右端の数字です。これが合計の最初の項目になります。
- 一番下の桁を取ってください右端の数字の隣です。その桁の10進数に16を掛けてこれを足して合計します。
- 3番目に小さい桁についても同じようにしますが、162(つまり16乗、256)を掛けます。それを合計に加えます。
- 桁ごとに、それぞれの桁に16の倍数をかけて続けます。(4096、65536など)
|
| 場所 | |||||
| 6 | 5 | 4 | 3 | 2 | 1 | |
| 値 | 1048576 (165) | 65536 (164) | 4096 (163) | 256 (162) | 16(161) | 1 (160) |
次の方法は、ソフトウェアで数字を変換するときに、より一般的に行われています。数字が何桁の桁数を持っているかを知る必要はありませんし、16以上の掛け算をすることもありませんが、紙の上では長く見えます。
- 16進数の各桁の10進数を使います。0~9の場合は同じですが、A=10、B=11、C=12、D=13、E=14、F=15となります。
- 以下の各ステップで変換した数字の合計を保管してください。
- 有効数字(左端の数字)から始めます。これは合計の最初の項目です。
- 他の桁が存在する場合は、合計に 16 を掛けて、次の桁の小数点以下の値を加算します。
- 桁がなくなるまで上記の手順を繰り返します。
例としては、以下のようなものがあります。5Fhと3425hを10進数にする方法1
|
|
|
|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||
例としては、以下のようになります。5Fhと3425hを10進数にする方法2
|
|
|
|
| |||||||||||||||||||||||||||||||||||||||||
関連ページ
質問と回答
Q:16進数とは何ですか?
A:16進数法は16個の記号で構成される16進数法です。
Q:10進法で使われる10個の記号は何ですか?
A:10進法で使われる10個の記号は、0、1、2、3、4、5、6、7、8、9です。
Q:16進法で使用される6つの余分な記号は何ですか?
A:16進法では、英語のアルファベットから取ったA、B、C、D、E、Fを使用しています。
Q:最近のコンピュータでは、1バイトは何ビットですか?
A:最近のコンピュータでは、1バイトは一般に8ビットを含んでいます。
Q:エンジニアやコンピュータ科学者は、4ビットの値を何と呼んでいますか?
A:エンジニアやコンピュータ科学者は、4ビットの値をニブル(nybbleと表記されることもあります)と呼びます。
Q:16進数を書くときに、他の番号体系との混同を避けるにはどうしたらよいですか?
A:16進数を書くときに他の番号付けシステムとの混乱を避けるために、数字の後に「h」または数字の前に「0x」を追加することができます。例えば、63hまたは0x63は16進数で63を意味します。
百科事典を検索する