十六進法
十六進法(じゅうろくしんほう、 英: hexadecimal)とは、16を底(てい)とし、底およびその冪を基準にして数を表す方法である。
記数法編集
十六進記数法とは、十六を底とする位取り記数法である。慣用に従い、通常のアラビア数字は十進表記とし、十六進記数法での表記は ( )16(括弧および下付きの16)で表す。慣例として、十六進記数法で表された数を「十六進数」と呼ぶことがあるが、「p進数における p = 16 のとき」という意味ではない。
一般には、0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F の計十六個の数字を用い、十を A 、十五を F 、十六を 10 と表記する。桁が一つ動く度に数値は 16 倍ずつ変わり、整数第二位は「十六の位」、整数第三位は「二百五十六の位」、小数第一位は「十六分の一の位」、小数第二位は「二百五十六分の一の位」となる。
- 整数
- (16)16 は 1×161 + 6 = 22 を表す。
- (30)16 は 3×161 = 48 を表す。
- (51)16 は 5×161 + 1 = 81 を表す。
- (B4)16 は 11×161 + 4 = 180 を表す。
- (100)16 は 1×162 = 256 を表す。
- (271)16 は 2×162 + 7×161 + 1 = 625 を表す。
- (7C5)16 は 7×162 + 12×161 + 5 = 1989 を表す。
- (1000)16 は 1×163 = 4096 を表す。
- (19A1)16 は 1×163 + 9×162 + 10×161 + 1 = 6561 を表す。
- 小数
- (0.1)16 は 1×16-1 = 1/16 を表す。
- (0.5)16 は 5×16-1 = 5/16 を表す。
- (0.01)16 は 1×16-2 = 1/256 を表す。
- (0.2A)16 は 2×16-1 + 10×16-2 = 42/256 を表す。
- (0.F3)16 は 15×16-1 + 3×16-2 = 243/256 を表す。
- (0.001)16 は 1×16-3 = 1/4096 を表す。
- (0.357)16 は 3×16-1 + 5×16-2 + 7×16-3 = 855/4096 を表す。
- (0.88B)16 は 8×16-1 + 8×16-2 + 11×16-3 = 2187/4096 を表す。
コンピュータでの十六進表記編集
コンピュータでは、データをビットやオクテットを単位として表すことが多い。それぞれ二進表記の1桁、8桁で表現できる。後者には、十六進表記がよく用いられ、二進表記の4桁が1桁で表現できるので、二進表記より短く表すことができる。1オクテットは、2桁の十六進表記 (0x00 - 0xff) で表現することができる。これは、十六・十六進表記と考えることができ、二百五十六進表記の特殊な表現であるともいえる。
十六進表記の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 以上の数字を表現する方法はコンピューター黎明期にはまだ一般的ではなかった。
- 1950年代までは 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 である。この方法は桁数に関わらず通用する。
小数と除算編集
割り切れない小数の循環部は下線で示す。「10」となる十六には因数に奇数が含まれていないため、1/3や1/5といった「1÷奇数」が全て割り切れない。小数を分数化しても、「m/奇数」となる小数が全く現れない。従って、偶数も、1/6{1÷(2×3)}や1/A{1÷(2×5)}といった「1÷奇数で割り切れる偶数」は割り切れない。六の倍数も十の倍数も逆数にすると全て割り切れないので、単位分数は無限小数が充ち溢れ、逆数が有限小数になる例は2の冪数だけになる。
十六進小数 | 六進既約分数 | 十進既約分数 | 六進小数 | 十進小数 | 十二進小数 | 二十進小数 |
---|---|---|---|---|---|---|
0.1 | 1/24 | 1/16 | 0.0213 | 0.0625 | 0.09 | 0.15 |
0.2 | 1/12 | 1/8 | 0.043 | 0.125 | 0.16 | 0.2A |
0.3 | 3/24 | 3/16 | 0.1043 | 0.1875 | 0.23 | 0.3F |
0.4 | 1/4 | 1/4 | 0.13 | 0.25 | 0.3 | 0.5 |
0.5 | 5/24 | 5/16 | 0.1513 | 0.3125 | 0.39 | 0.65 |
0.6 | 3/12 | 3/8 | 0.213 | 0.375 | 0.46 | 0.7A |
0.7 | 11/24 | 7/16 | 0.2343 | 0.4375 | 0.53 | 0.8F |
0.8 | 1/2 | 1/2 | 0.3 | 0.5 | 0.6 | 0.A |
0.9 | 13/24 | 9/16 | 0.3213 | 0.5625 | 0.69 | 0.B5 |
0.A | 5/12 | 5/8 | 0.343 | 0.625 | 0.76 | 0.CA |
0.B | 15/24 | 11/16 | 0.4043 | 0.6875 | 0.83 | 0.DF |
0.C | 3/4 | 3/4 | 0.43 | 0.75 | 0.9 | 0.F |
0.D | 21/24 | 13/16 | 0.4513 | 0.8125 | 0.99 | 0.G5 |
0.E | 11/12 | 7/8 | 0.513 | 0.875 | 0.A6 | 0.HA |
0.F | 23/24 | 15/16 | 0.5343 | 0.9375 | 0.B3 | 0.IF |
N進法 | Nの 素因数分解 |
1/3 | 1/9 (1÷32) |
(1/27)10 (1÷33) |
100÷3 | 100÷9 | 100÷33 |
---|---|---|---|---|---|---|---|
十六進法 | 24 | 0.5555… | 0.1C7… | 0.097B425ED… (1÷1B) |
55.5555… | 1C.71C… | 9.7B425ED09… (100÷1B) |
六進法 | 2×3 | 0.2 | 0.04 (1÷13) |
0.012 (1÷43) |
221.2 (1104÷3) |
44.24 (1104÷13) |
13.252 (1104÷43) |
十二進法 | 22×3 | 0.4 | 0.14 | 0.054 (1÷23) |
71.4 (194÷3) |
24.54 (194÷9) |
9.594 (194÷23) |
N進法 | Nの素因数分解 | 1/5 | (1/25)10 (1÷52) | 100÷5 | 100÷52 |
---|---|---|---|---|---|
十六進法 | 24 | 0.3333… | 0.0A3D7… (1÷19) |
33.3333… | A.3D70A… (100÷19) |
十進法 | 2×5 | 0.2 | 0.04 (1÷25) |
51.2 (256÷5) |
10.24 (256÷25) |
二十進法 | 22×5 | 0.4 | 0.0G (1÷15) |
2B.4 (CG÷5) |
A.4G (CG÷15) |
- その他の計算例
- 被除数がB(十進法の11)
- 十六進法:B ÷ 3 = 3.AAAA…
- 十六進法:B ÷ 5 = 2.3333…
- 六進法:(15)6 ÷ 3 = 3.4
- 十二進法:B ÷ 3 = 3.8
- 十進法:(11)10 ÷ 5 = 2.2
- 二十進法:B ÷ 5 = 2.4
- 被除数が8E(十進法の142)
- 十六進法:(8E)16 ÷ 3 = 2F.5555…
- 十六進法:(8E)16 ÷ 5 = 1C.6666…
- 六進法:(354)6 ÷ 3 = 115.2
- 十二進法:(BA)12 ÷ 3 = 3B.4
- 十進法:(142)10 ÷ 5 = 28.4
- 二十進法:(72)20 ÷ 5 = 18.8
四則演算表編集
一桁同士の計算:
|
単位系編集
単位系の十六進法では、数は十進法を用いて表記し、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