十六進法

出典: フリー百科事典『ウィキペディア(Wikipedia)』

出典: フリー百科事典『ウィキペディア(Wikipedia)』
検索に移動

十六進法(じゅうろくしんほう、 : hexadecimal)とは、16を底(てい)とし、底およびそのを基準にして数を表す方法である。

記数法[編集]

十六進記数法とは、十六を底とする位取り記数法である。

表記する方法は、20世紀半ばまで人やグループごとに異なっていて定まっていなかった(#初期の表記法)が、20世紀後半にコンピュータが普及して以降、つまりここ数十年は一般には、0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F の計十六個の文字数字として用い(※1)、を A 、十一をB ... 十五を F 、十六を 10 と表記することが定着している。桁が一つ動く度に数値は 16 倍ずつ変わり、整数第二位は「十六の位」、整数第三位は「二百五十六の位」、小数第一位は「十六分の一の位」、小数第二位は「二百五十六分の一の位」となる。

下記では慣用に従い、通常のアラビア数字は十進表記とし、十六進記数法での表記は ( )16(括弧および下付きの16)で表す。

  • (※1)十六進記数法のアルファベット大文字の代わりに小文字つまりa, b, c, d, e, fが使われる場合もある。
  • なお慣例として、十六進記数法で表された数を「十六進数」と呼ぶことがあるが、「p進数における p = 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 を表す。
  • (300)16 は 3×162 = 768 を表す。
  • (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. 偶数2倍数)は、一の位が、0、2、4、6、8、A、C、Eのいずれかとなる。このうち、2、6、A、Eの数は単偶数である。
  2. 3の倍数は十進法同様に数字和(各桁の和)が3の倍数の数。
  3. 複偶数4の倍数)は、一の位が、0、4、8、Cのいずれかとなる。
  4. 5の倍数は六進法同様に数字和が5の倍数の数。
  5. 8の倍数は、一の位が0か8のいずれかとなる。
  6. F1615)の倍数は数字和がFの倍数の数。
  7. 101616)の倍数は一の位が0である。
  8. 201632)の倍数は末尾が0で十位が偶数の数である。
  9. 301648)の倍数は末尾0の数のうち数字和が3の倍数の数。
  10. 401664)の倍数は末尾が0で十位が複偶数の数である。
  11. 501680)の倍数は末尾0の数のうち数字和が5の倍数の数。
  12. 8016128)の倍数は末尾が0ので十位が0か8の数。
  13. 10016256)の倍数は下2桁が00である。
  14. 30016768)の倍数は下2桁が00でかつ数字和が3の倍数である。

コンピュータでの十六進表記[編集]

コンピュータでは、データをビットオクテットを単位として表すことが多い。それぞれ二進表記の1桁、8桁で表現できる。 使える数は、前者は0と1だけが許されるが、後者は0~255までに広がる。

後者には、十六進表記がよく用いられ、二進表記の4桁が1桁で表現できるので、二進表記より短く表すことができる。1オクテットは、2桁の十六進表記 (0x00 - 0xff) で表現することができる。これは、十六・十六進表記と考えることができ、二百五十六進表記の特殊な表現であるともいえる。

十六進表記の1桁はニブルとも呼ばれる。


下記は具体例。左側はメモリアドレス。右側は十六進法(16進数)で表示された機械語データなど。この例ではアルファベットは小文字が使われている。画面モニタ)に表示する時は、可読性を高めるために2文字や4文字ごとに空白をはさむことが一般的である。

00000000  57 69 6b 69 70 65 64 69  61 2c 20 74 68 65 20 66  
00000010  72 65 65 20 65 6e 63 79  63 6c 6f 70 65 64 69 61  
00000020  20 74 68 61 74 20 61 6e  79 6f 6e 65 20 63 61 6e 
00000030  20 65 64 69 74 0a


表記方法[編集]

十六進表記はよく使われるので、プログラム言語ではリテラルとして特別な表記が準備されていることが多い。一般に、大文字の A-F と小文字の a-f を区別しない。

(1000)16 の表記の例を挙げる。

表記例 言語・処理系 備考
0x1000 整数リテラルを記述する場合。
\x1000
  • AWK
  • C
  • C#
  • C++
  • Java
  • Perl
文字リテラルや文字列リテラル中で文字コードを記述する場合。
#x1000 整数値の外部表現。
က 文字実体参照として文字コードを記述する場合。
1000h あるいは 1000H 整数イミディエートを記述する場合。この表記の場合、十六進表記が英字 (AF) で始まるときは、変数名などと区別するため、先頭に 0 を付けねばならないことがある。例: 0A000H
&h1000 整数リテラルを記述する場合。
$1000
  • BASIC(マイクロソフト製以外)
  • Pascal (一部の処理系)
整数リテラルを記述する場合。主にモトローラ系のアセンブリ言語・マイコン類の資料。

読み方は十進表記の1000((いっ)せん)と区別するため、文字並びのまま「ぜろ・エックス・いち・ぜろ・ぜろ・ぜろ」などと読む。慣用では「ヘキサの千」もしくは「千ヘキサ」と言った読み方も行われている。

上記の数字に付く hx は英語で十六進法を意味する hexadecimal から取ったものである。十六進表記であることを明示する。

初期の表記法[編集]

計算機科学者 Bruce Alan Martinによって提唱された十六進数の国際表記法、新たな数字。(1968年10月。出典: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) [1]

A - F の文字を用いて 9 以上の数字を表現する方法はコンピューター黎明期にはまだ一般的ではなかった。

時期 機種 10 11 12 13 14 15
1950年代 Bendix-14など複数 0 1 2 3 4 5
1950 SWAC[2] u v w x y z
1956 Bendix G-15[3][2] u v w x y z
1952 ILLIAC I[4][2] K S N J F L
1956 Librascope LGP-30英語版[5][2] F G J K Q W
1957 Honeywell Datamatic D-1000英語版[2] b c d e f g
1967 Elbit 100[2] B C D E F G
1960 Monrobot XI英語版[2] S T U V W X
1960 NEC NEAC 1103[6] D G H J K V
1964 Pacific Data Systems 1020[2] L C A S M D
1980 Б3-34英語版(ソビエトのプログラム電卓) L C Г E " "[7]
  • 1968年にBoby Lapointe英語版が新たな表記Bibi-binary英語版を定義した。この表記は普及しなかった。
  • ブルックヘブン国立研究所のBruce Alan Martinは A–F による表記に不快感を示し、ビット配列に基づいた全く新しい数字を考案して1968年CACM英語版へ提案したが、賛同者は少なかった[1]
  • 一部の7セグメントディスプレイは9以上の数字を表示できずゴミが出る。

二・八・十・十二進表記との対応[編集]

十六進表記 十二進表記 十進表記 八進表記 二進表記
(0)16 (0)12 (0)10 (0)8 0 0 0 0
(1)16 (1)12 (1)10 (1)8 0 0 0 1
(2)16 (2)12 (2)10 (2)8 0 0 1 0
(3)16 (3)12 (3)10 (3)8 0 0 1 1
(4)16 (4)12 (4)10 (4)8 0 1 0 0
(5)16 (5)12 (5)10 (5)8 0 1 0 1
(6)16 (6)12 (6)10 (6)8 0 1 1 0
(7)16 (7)12 (7)10 (7)8 0 1 1 1
(8)16 (8)12 (8)10 (10)8 1 0 0 0
(9)16 (9)12 (9)10 (11)8 1 0 0 1
(A)16 (A)12 (10)10 (12)8 1 0 1 0
(B)16 (B)12 (11)10 (13)8 1 0 1 1
(C)16 (10)12 (12)10 (14)8 1 1 0 0
(D)16 (11)12 (13)10 (15)8 1 1 0 1
(E)16 (12)12 (14)10 (16)8 1 1 1 0
(F)16 (13)12 (15)10 (17)8 1 1 1 1

二進表記から十六進表記への変換[編集]

二進表記から十六進表記に変換する方法を、以下に示す。

整数部分[編集]

  1. 二進表記を右から順に4桁ずつ区切る。最後(最左部分)が4桁未満のときは、空いた部分(左側)には全て0があるとみなす。
    • (111010)2 → (11, 1010)2 → (0011, 1010)2
  2. 各部分を十六進表記に変換する。
    • (0011)2 = (3)16, (1010)2 = (A)16
  3. 得られた十六進表記を並べて (3A)16 が得られる。

この方法は桁数に関わらず通用する。例えば、(100110010111010)2 は (0100, 1100, 1011, 1010)2 であるから、(4CBA)16 となる。

小数部分[編集]

小数部分の変換方法は、次のとおり。

  1. 二進表記を小数点を基準にして左から順に4桁ずつ区切る。最後(最右部分)が4桁未満のときは、空いた部分(右側)には全て0があるとみなす。
    • (0.110101)2 → (0., 1101, 0100)2
  2. 各部分を十六進表記に変換する。
    • (1101)2 = (D)16, (0100)2 = (4)16
  3. 得られた十六進表記を並べて (0.D4)16 が得られる。

したがって、(111010.110101)2 = (3A.D4)16 である。この方法は桁数に関わらず通用する。

小数と除算[編集]

割り切れない小数の循環部は下線で示す。「10」となる十六には因数奇数が含まれていないため、1/31/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
小数への変換と除算(3の冪数)
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)
小数への変換と除算(5の冪数)
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

四則演算表[編集]

一桁同士の計算:

加法表
+ 0 1 2 3 4 5 6 7 8 9 A B C D E F
0 0 1 2 3 4 5 6 7 8 9 A B C D E F
1 1 2 3 4 5 6 7 8 9 A B C D E F 10
2 2 3 4 5 6 7 8 9 A B C D E F 10 11
3 3 4 5 6 7 8 9 A B C D E F 10 11 12
4 4 5 6 7 8 9 A B C D E F 10 11 12 13
5 5 6 7 8 9 A B C D E F 10 11 12 13 14
6 6 7 8 9 A B C D E F 10 11 12 13 14 15
7 7 8 9 A B C D E F 10 11 12 13 14 15 16
8 8 9 A B C D E F 10 11 12 13 14 15 16 17
9 9 A B C D E F 10 11 12 13 14 15 16 17 18
A A B C D E F 10 11 12 13 14 15 16 17 18 19
B B C D E F 10 11 12 13 14 15 16 17 18 19 1A
C C D E F 10 11 12 13 14 15 16 17 18 19 1A 1B
D D E F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C
E E F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D
F 0F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E
乗法表
× 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 00 0F 1E 2D 3C 4B 5A 69 78 87 96 A5 B4 C3 D2 E1

英単語 Hexadecimal の語源[編集]

Hexadecimalはギリシャ語で6(ἕξ, hex)を意味するhexa-と、ラテン語で10番目(tenth)を意味する-decimalの複合語。ウェブスター新国際オンライン版第3版によるとhexadecimalは完全ラテン語由来のsexadecimalの代替語である(Bendixのドキュメントにも同様の記述がある[3])。Merriam-Webster's Collegiate Dictionaryにおけるhexadecimalの初出は1954年で、当初より現在に至るまで国際科学用語ISVに分類されている。ギリシャ語とラテン語を混ぜ合わせた造語法はISVでは一般的にみられる。六十進法を意味するsexagesimalはラテン語の接頭子を保っている。ドナルド・クヌースはラテン語で16進数を表すとするならばsenidenaryか、または恐らくsedenaryが正しいのではないかとしている(同じ作り方で考えればbinary(2進数)ternary(3進数)quaternary(4進数)となり、その流れでいえば10進数decimalや8進数octalもdenaryやoctonaryが正しいことになる)[8]。アルフレッド・B・テイラーは16進数を不便な数字だとして嫌っていたが、1800年代にsenidenaryとして16進数を研究していた[9][10]。シュワルツマンによると、ラテン語から考えればsexadecimalが自然だが、コンピュータのハッカーたちは略語にsexを使うだろうと話した[11]。語源的に完全ギリシャ語で考えればhexadecadic、ἑξαδεκαδικός、hexadekadikósが正しいと考えられる(ただし現代のギリシャではdecahexadicδεκαεξαδικόςdekaexadikosが使われている)。

単位系[編集]

単位系の十六進法では、数は十進法を用いて表記し、16に至ると単位を繰り上げる方法を採る。

ヤード・ポンド法では、質量の単位に十六進法が用いられる。

尺貫法の質量の単位の一部にも十六進法が用いられる。

ギャラリー[編集]

脚注[編集]

[脚注の使い方]
  1. ^ a b Martin, Bruce Alan (October 1968). “編集者への手紙: バイナリ表記について”. Communications of the ACM (Associated Universities Inc.) 11 (10): 658. doi:10.1145/364096.364107. 
  2. ^ a b c d e f g h Computer Arithmetic”. quadibloc (2018年). 2018年7月16日閲覧。
  3. ^ a b “2.1.3 Sexadecimal notation”. G15Dプログラマーズリファレンスマニュアル. Los Angeles, CA, USA: Bendix Computer, Division of Bendix Aviation Corporation. p. 4. オリジナルの2017-06-01時点におけるアーカイブ。. https://web.archive.org/web/20170601222212/http://bitsavers.trailing-edge.com/pdf/bendix/g-15/G15D_Programmers_Ref_Man.pdf 2017年6月1日閲覧. "16個の数字(0~15)で4ビットのグループを表すことができるためこの基数を用いる。各組合せにシンボルを割り当てることでこの表記をsexadecimalと呼べるようになる(略称をsexと呼ぶことは憚れるため、通常はhexと略す)。sexadecimalのシンボルは10個の10進数に加え、G-15においては、文字 u v w x y z である。この記号は任意であり、別のコンピュータでは最後の6文字に異なるアルファベットを割り当ててもよい。" 
  4. ^ ILLIAC Programming - A Guide to the Preparation of Problems For Solution by the University of Illinois Digital Computer”. bitsavers.org. Urbana, Illinois, USA: Digital Computer Laboratory, Graduate College, University of Illinois. pp. 3-2 (1956年9月1日). 2014年12月18日閲覧。
  5. ^ ROYAL PRECISION Electronic Computer LGP - 30 PROGRAMMING MANUAL. Port Chester, New York: Royal McBee Corporation. (April 1957). オリジナルの2017-05-31時点におけるアーカイブ。. https://web.archive.org/web/20170531153004/http://ed-thelen.org/comp-hist/lgp-30-man.html 2017年5月31日閲覧。  (注:この奇妙な配列はLGP-30における6ビットキャラクターコードの順番から来ている。)
  6. ^ NEC Parametron Digital Computer Type NEAC-1103. Tokyo, Japan: Nippon Electric Company Ltd.. (1960). Cat. No. 3405-C. オリジナルの2017-05-31時点におけるアーカイブ。. https://web.archive.org/web/20170531112850/http://archive.computerhistory.org/resources/text/NEC/NEC.1103.1958102646285.pdf 2017年5月31日閲覧。 
  7. ^ スペース記号
  8. ^ Knuth, Donald. (1969). The Art of Computer Programming, Volume 2. ISBN 0-201-03802-1. (Chapter 17.)
  9. ^ Alfred B. Taylor, Report on Weights and Measures, Pharmaceutical Association, 8th Annual Session, Boston, 15 September 1859. See pages and 33 and 41.
  10. ^ Alfred B. Taylor, "Octonary numeration and its application to a system of weights and measures", Proc Amer. Phil. Soc. Vol XXIV, Philadelphia, 1887; pages 296-366. See pages 317 and 322.
  11. ^ Schwartzman, S. (1994). The Words of Mathematics: an etymological dictionary of mathematical terms used in English. ISBN 0-88385-511-9.

関連項目[編集]