十六進法
出典: フリー百科事典『ウィキペディア(Wikipedia)』
十六進法(じゅうろくしんほう)とは、16 を底(てい)とし、底およびその冪を基準にして数を表す方法である。
目次 |
[編集] 記数法
十六進記数法とは、16 を底とする位取り記数法である。慣用に従い、通常のアラビア数字は十進数とし、十六進記数法の表記は括弧および下付の 16 で表す。十六進記数法で表された数を十六進数と呼ぶ。
一般には、0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F の 16 個の数字を用いる。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) で表現することができる。
十六進数の 1 桁はニブルとも呼ばれる。
[編集] 表記方法
十六進法は非常によく使われるため、プログラミング言語ではリテラルとして特別な表記が準備されていることが多い。一般に、大文字の A-F と小文字の a-f を区別しない。 以下に (1000)16 の表記の例を挙げる。
- 0x1000 (C, C++, Java, Perl など)
- x1000 (HTML の文字参照における表記。例: က)
- 1000h あるいは 1000H (主にインテル系のアセンブリ言語・マイコン類の資料)
- この表記の場合、十六進数が英字 (A-F) で始まる時は、変数名などと区別するため、頭にダミーの 0 を付けねばならないことがある。例: 0A000H
- &h1000 (BASIC、とりわけマイクロソフト系のもの)
- $1000 (上記以外の BASIC や一部の Pascal 処理系、主にモトローラ系のアセンブリ言語・マイコン類の資料)
読み方は文字並びのまま「ぜろエックスいちぜろぜろぜろ」などと読む。慣用では「ヘキサの千(せん)」もしくは「千(せん)ヘキサ」と言った読み方も行われているが、数学的には正しくない。
上記の数字に付く h や x は英語で十六進法を意味する hexadecimal から取ったものである。十六進数であることを明示し、b (二進数)、o (八進数)、d (十進数) などと区別するために用いる。
[編集] 二・八・十進数との対応
(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 があると見なす。
- (11010)2 → (1, 1010)2 → (0001, 1010)2
- 各二進 4桁の数を 十六進数に変換する。
- (0001)2 = 8 × 0 + 4 × 0 + 2 × 0 + 1 × 1 = (1)16, (1010)2 = 8 × 1 + 4 × 0 + 2 × 1 + 1 × 0 = (A)16
- 得られた十六進数を並べて (1A)16 が得られる。
この方法は何桁であっても通用する。例えば、(100110010111010)2 は (0100, 1100, 1011, 1010)2 であるから (4CBA)16 となる。
[編集] 小数部分
ここでは、0 以上 1 未満の小数部分の変換方法について説明する。
- まずは二進数を小数点を基準に左から順に 4 桁ずつ区切っていく。もし 4 桁未満であれば、空いた部分(右側)には全て 0 があると見なす。
- (0.11)2 → (0., 1100)2
- 続いて、各組を十六進数に変換する。
- (1100)2 = (C)16
- 得られた十六進数を並べて (0.C)16 が得られる。
[編集] 乗算表
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 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 に至ると単位を繰り上げる方法を採る。