十六進法
十六進法(じゅうろくしんほう、 英: 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 を表す。
- (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 を表す。
倍数判定[編集]
- 偶数(2の倍数)は、一の位が、0、2、4、6、8、A、C、Eのいずれかとなる。このうち、2、6、A、Eの数は単偶数である。
- 3の倍数は十進法同様に数字和(各桁の和)が3の倍数の数。
- 複偶数(4の倍数)は、一の位が、0、4、8、Cのいずれかとなる。
- 5の倍数は六進法同様に数字和が5の倍数の数。
- 8の倍数は、一の位が0か8のいずれかとなる。
- F16(15)の倍数は数字和がFの倍数の数。
- 1016(16)の倍数は一の位が0である。
- 2016(32)の倍数は末尾が0で十位が偶数の数である。
- 3016(48)の倍数は末尾0の数のうち数字和が3の倍数の数。
- 4016(64)の倍数は末尾が0で十位が複偶数の数である。
- 5016(80)の倍数は末尾0の数のうち数字和が5の倍数の数。
- 8016(128)の倍数は末尾が0ので十位が0か8の数。
- 10016(256)の倍数は下2桁が00である。
- 30016(768)の倍数は下2桁が00でかつ数字和が3の倍数である。
コンピュータでの十六進表記[編集]
コンピュータでは、データをビットやオクテットを単位として表すことが多い。それぞれ二進表記の1桁、8桁で表現できる。 使える数は、前者は0と1だけが許されるが、後者は0~255までに広がる。
後者には、十六進表記がよく用いられ、二進表記の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 以上の数字を表現する方法はコンピューター黎明期にはまだ一般的ではなかった。
時期 | 機種 | 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 |
二進表記から十六進表記への変換[編集]
二進表記から十六進表記に変換する方法を、以下に示す。
整数部分[編集]
- 二進表記を右から順に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
四則演算表[編集]
一桁同士の計算:
|
英単語 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に至ると単位を繰り上げる方法を採る。
尺貫法の質量の単位の一部にも十六進法が用いられる。
脚注[編集]
- ^ a b Martin, Bruce Alan (October 1968). “編集者への手紙: バイナリ表記について”. Communications of the ACM (Associated Universities Inc.) 11 (10): 658. doi:10.1145/364096.364107.
- ^ a b c d e f g h “Computer Arithmetic”. quadibloc (2018年). 2018年7月16日閲覧。
- ^ a b “2.1.3 Sexadecimal notation”. G15Dプログラマーズリファレンスマニュアル. Los Angeles, CA, USA: Bendix Computer, Division of Bendix Aviation Corporation. p. 4. オリジナルの2017-06-01時点におけるアーカイブ。 2017年6月1日閲覧. "16個の数字(0~15)で4ビットのグループを表すことができるためこの基数を用いる。各組合せにシンボルを割り当てることでこの表記をsexadecimalと呼べるようになる(略称をsexと呼ぶことは憚れるため、通常はhexと略す)。sexadecimalのシンボルは10個の10進数に加え、G-15においては、文字 u v w x y z である。この記号は任意であり、別のコンピュータでは最後の6文字に異なるアルファベットを割り当ててもよい。"
- ^ “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日閲覧。
- ^ ROYAL PRECISION Electronic Computer LGP - 30 PROGRAMMING MANUAL. Port Chester, New York: Royal McBee Corporation. (April 1957). オリジナルの2017-05-31時点におけるアーカイブ。 2017年5月31日閲覧。 (注:この奇妙な配列はLGP-30における6ビットキャラクターコードの順番から来ている。)
- ^ NEC Parametron Digital Computer Type NEAC-1103. Tokyo, Japan: Nippon Electric Company Ltd.. (1960). Cat. No. 3405-C. オリジナルの2017-05-31時点におけるアーカイブ。 2017年5月31日閲覧。
- ^ スペース記号
- ^ Knuth, Donald. (1969). The Art of Computer Programming, Volume 2. ISBN 0-201-03802-1. (Chapter 17.)
- ^ Alfred B. Taylor, Report on Weights and Measures, Pharmaceutical Association, 8th Annual Session, Boston, 15 September 1859. See pages and 33 and 41.
- ^ 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.
- ^ Schwartzman, S. (1994). The Words of Mathematics: an etymological dictionary of mathematical terms used in English. ISBN 0-88385-511-9.