十六進法
十六進法(じゅうろくしんほう)とは、16 を底(てい)とし、底およびその冪を基準にして数を表す方法である。
目次
記数法
十六進記数法とは、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</sup> の表記の例を挙げる。
- 0x1000(C, C++, Java, Perl など)
- x1000(HTML の文字参照における表記。例: က)
- 1000h あるいは 1000H(主にインテル系のアセンブリ言語・マイコン類の資料)
- この表記の場合、十六進表記が英字 (A-F) で始まるときは、変数名などと区別するため、先頭に 0 を付けねばならないことがある。例: 0A000H
- &h1000(BASIC、とりわけマイクロソフト系のもの)
- $1000(上記以外の BASIC や一部の Pascal 処理系、主にモトローラ系のアセンブリ言語・マイコン類の資料)
読み方は文字並びのまま「ぜろエックスいちぜろぜろぜろ」などと読む。慣用では「ヘキサの千(せん)」もしくは「千(せん)ヘキサ」と言った読み方も行われているが、数学的には正しくない。
上記の数字に付く h や x は英語で十六進法を意味する hexadecimal から取ったものである。十六進表記であることを明示し、b(二進法)、o(八進法)、d(十進法)などと区別するために用いる。
初期の表記法
A~Fの文字を用いて9以上の数字を表現する方法はコンピューター黎明期にはまだ一般的ではなかった。
- 50年代までは0~5の数字の上に長音記号("¯")を付けて10~15の数値を表す実装が好まれた。
- Bendix G-15ではU~Zの文字がつかわれた。
- Librascope テンプレート:仮リンクではF、G、J、K、Q、Wの文字がつかわれた。[1]
- ブルックヘブン国立研究所のBruce Alan MartinはA–Fによる表記に不快感を示し、ビット配列に基づいた全く新しい数字を考案して1968年にテンプレート:仮リンクへ提案したが、賛同者は少なかった。[2]
- ソビエトのプログラム電卓 テンプレート:仮リンクやそのコピー商品は"−"、"L"、"C"、"Г"、"E"、" "(スペース記号)を用いた。
二・八・十進表記との対応
16, 10, 8 進表記 | 二進表記 | ||||||||||
(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</sup> = (3)16</sup>, (1010)2</sup> = (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</sup> である。
乗算表
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | テンプレート:00 | テンプレート:00 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
2 | 0 | 2 | 4 | 6 | 8 | A | C | E | 10 | 12 | 14 | 16 | 18 | 1A | 1C | 1E |
3 | 0 | 3 | 6 | 9 | C | F | 12 | 15 | 18 | 1B | 1E | 21 | 24 | 27 | 2A | 2D |
4 | 0 | 4 | 8 | C | 10 | 14 | 18 | 1C | 20 | 24 | 28 | 2C | 30 | 34 | 38 | 3C |
5 | 0 | 5 | A | F | 14 | 19 | 1E | 23 | 28 | 2D | 32 | 37 | 3C | 41 | 46 | 4B |
6 | 0 | 6 | C | 12 | 18 | 1E | 24 | 2A | 30 | 36 | 3C | 42 | 48 | 4E | 54 | 5A |
7 | 0 | 7 | E | 15 | 1C | 23 | 2A | 31 | 38 | 3F | 46 | 4D | 54 | 5B | 62 | 69 |
8 | 0 | 8 | 10 | 18 | 20 | 28 | 30 | 38 | 40 | 48 | 50 | 58 | 60 | 68 | 70 | 78 |
9 | 0 | 9 | 12 | 1B | 24 | 2D | 36 | 3F | 48 | 51 | 5A | 63 | 6C | 75 | 7E | 87 |
A | 0 | A | 14 | 1E | 28 | 32 | 3C | 46 | 50 | 5A | 64 | 6E | 78 | 82 | 8C | 96 |
B | 0 | B | 16 | 21 | 2C | 37 | 42 | 4D | 58 | 63 | 6E | 79 | 84 | 8F | 9A | A5 |
C | 0 | C | 18 | 24 | 30 | 3C | 48 | 54 | 60 | 6C | 78 | 84 | 90 | 9C | A8 | B4 |
D | 0 | D | 1A | 27 | 34 | 41 | 4E | 5B | 68 | 75 | 82 | 8F | 9C | A9 | B6 | C3 |
E | 0 | E | 1C | 2A | 38 | 46 | 54 | 62 | 70 | 7E | 8C | 9A | A8 | B6 | C4 | D2 |
F | 0 | F | 1E | 2D | 3C | 4B | 5A | 69 | 78 | 87 | 96 | A5 | B4 | C3 | D2 | E1 |
単位系
単位系の十六進法では、数は十進法を用いて表記し、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
関連項目