十六進法
十六進法(じゅうろくしんほう、 英: hexadecimal)とは、16を底(てい)とし、底およびその冪を基準にして数を表す方法である。
Contents
記数法
十六進記数法とは、16を底とする位取り記数法である。慣用に従い、通常のアラビア数字は十進表記とし、十六進記数法での表記は ( )16(括弧および下付きの16)で表す。慣例として、十六進記数法で表された数を「十六進数」と呼ぶことがあるが、「p進数における p = 16 のとき」という意味ではない。
一般には、16個の数字 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F を用いる。A から F は、それぞれ十進での 10 から 15 を表す。
- (50)16 は 5×161 + 0×160 = 80 を表す。
- (B4)16 = 11×161 + 4×160 = 180 を表す。
コンピュータでの十六進表記
コンピュータでは、データをビットやオクテットを単位として表すことが多い。それぞれ二進表記の1桁、8桁で表現できる。後者には、十六進表記がよく用いられ、二進表記の4桁が1桁で表現できるので、二進表記より短く表すことができる。1オクテットは、2桁の十六進表記 (0x00 - 0xff) で表現することができる。これは、16-16進表記と考えることができ、256進表記の特殊な表現であるともいえる。
十六進表記の1桁はニブルとも呼ばれる。
表記方法
十六進表記はよく使われるので、プログラム言語ではリテラルとして特別な表記が準備されていることが多い。一般に、大文字の A-F と小文字の a-f を区別しない。
(1000)16 の表記の例を挙げる。
表記例 | 言語・処理系 | 備考 |
---|---|---|
0x1000
|
整数リテラルを記述する場合。 | |
\x1000
|
|
文字リテラルや文字列リテラル中で文字コードを記述する場合。 |
#x1000
|
整数値の外部表現。 | |
က
|
文字実体参照とてし文字コードを記述する場合。 | |
1000h あるいは 1000H
|
整数イミディエートを記述する場合。この表記の場合、十六進表記が英字 (A ~F ) で始まるときは、変数名などと区別するため、先頭に 0 を付けねばならないことがある。例: 0A000H
| |
&h1000
|
整数リテラルを記述する場合。 | |
$1000
|
|
整数リテラルを記述する場合。主にモトローラ系のアセンブリ言語・マイコン類の資料。 |
読み方は十進表記の1000((いっ)せん)と区別するため、文字並びのまま「ぜろ・エックス・いち・ぜろ・ぜろ・ぜろ」などと読む。慣用では「ヘキサの千」もしくは「千ヘキサ」と言った読み方も行われている。
上記の数字に付く h
や x
は英語で十六進法を意味する hexadecimal から取ったものである。十六進表記であることを明示する。
初期の表記法
A - F の文字を用いて 9 以上の数字を表現する方法はコンピューター黎明期にはまだ一般的ではなかった。
- 50年代までは 0 - 5 の数字の上に長音記号 ("¯") を付けて 10 - 15 の数値を表す実装が好まれた。
- Bendix G-15では U - Z の文字がつかわれた。
- Librascope LGP-30では F, G, J, K, Q, W の文字がつかわれた[1]。
- ブルックヘブン国立研究所のBruce Alan Martinは A–F による表記に不快感を示し、ビット配列に基づいた全く新しい数字を考案して1968年にCACMへ提案したが、賛同者は少なかった[2]。
- ソビエトのプログラム電卓Б3-34やそのコピー商品は "−", "L", "C", "Г", "E", " "(スペース記号)を用いた。
二・八・十進表記との対応
十六進表記 | 十進表記 | 八進表記 | 二進表記 | |||
---|---|---|---|---|---|---|
(0)16 | (0)10 | (0)8 | 0 | 0 | 0 | 0 |
(1)16 | (1)10 | (1)8 | 0 | 0 | 0 | 1 |
(2)16 | (2)10 | (2)8 | 0 | 0 | 1 | 0 |
(3)16 | (3)10 | (3)8 | 0 | 0 | 1 | 1 |
(4)16 | (4)10 | (4)8 | 0 | 1 | 0 | 0 |
(5)16 | (5)10 | (5)8 | 0 | 1 | 0 | 1 |
(6)16 | (6)10 | (6)8 | 0 | 1 | 1 | 0 |
(7)16 | (7)10 | (7)8 | 0 | 1 | 1 | 1 |
(8)16 | (8)10 | (10)8 | 1 | 0 | 0 | 0 |
(9)16 | (9)10 | (11)8 | 1 | 0 | 0 | 1 |
(A)16 | (10)10 | (12)8 | 1 | 0 | 1 | 0 |
(B)16 | (11)10 | (13)8 | 1 | 0 | 1 | 1 |
(C)16 | (12)10 | (14)8 | 1 | 1 | 0 | 0 |
(D)16 | (13)10 | (15)8 | 1 | 1 | 0 | 1 |
(E)16 | (14)10 | (16)8 | 1 | 1 | 1 | 0 |
(F)16 | (15)10 | (17)8 | 1 | 1 | 1 | 1 |
二進表記から十六進表記への変換
二進表記から十六進表記に変換する方法を、以下に示す。
整数部分
- 二進表記を右から順に4桁ずつ区切る。最後(最左部分)が4桁未満のときは、空いた部分(左側)には全て0があるとみなす。
- (111010)2 → (11, 1010)2 → (0011, 1010)2
- 各部分を十六進表記に変換する。
- (0011)2 = (3)16, (1010)2 = (A)16
- 得られた十六進表記を並べて (3A)16 が得られる。
この方法は桁数に関わらず通用する。例えば、(100110010111010)2 は (0100, 1100, 1011, 1010)2 であるから、(4CBA)16 となる。
小数部分
小数部分の変換方法は、次のとおり。
- 二進表記を小数点を基準にして左から順に4桁ずつ区切る。最後(最右部分)が4桁未満のときは、空いた部分(右側)には全て0があるとみなす。
- (0.110101)2 → (0., 1101, 0100)2
- 各部分を十六進表記に変換する。
- (1101)2 = (D)16, (0100)2 = (4)16
- 得られた十六進表記を並べて (0.D4)16 が得られる。
したがって、(111010.110101)2 = (3A.D4)16 である。この方法は桁数に関わらず通用する。
四則演算表
一桁同士の計算:
|
単位系
単位系の十六進法では、数は十進法を用いて表記し、16に至ると単位を繰り上げる方法を採る。
尺貫法の質量の単位の一部にも十六進法が用いられる。
脚注
- ↑ この奇妙な配列はLGP-30における6ビットキャラクターコードの順番から来ている。LGP-30 PROGRAMMING MANUAL
- ↑ Letters to the editor: On binary notation, Bruce Alan Martin, Associated Universities Inc., Communications of the ACM, Volume 11, Issue 10 (October 1968) Page: 658 doi:10.1145/364096.364107