十六進法

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

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

位取り記数法（N進位取り記数法）では、まず基数（base。集合の基数（cardinal）とは異なる）となる自然数 N に対して、

の数値に対応する数字の記法を対応させるので、下表のようにする（A〜F を英小文字にする場合もある）。

+ 十六進数記法の対応 十進法  0  1  2  3  4  5  6  7  8  9  10  11  12  13  14  15 十六進法  0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F

次に、これらを用いて

という数字列で表現する。（ただし、、 はそれぞれの 0 から F の数字であり、 とする）

この数字列が、

という数値であることを表すものである青木和彦・上野健爾他『岩波数学入門辞典』岩波書店、2005年、ISBN 4-00-080209-7、pp.46、125-126 において、底をN=16とした場合。。

上記の数字列の先頭にマイナス符号「-」を付けることで負数を表現できる。

ここで  は整数部の位の値を表し、 小数部の位の値を表す。位の値は  から  までの整数である。整数部と小数部の区切りの点は小数点と呼ばれる。あるいはより形式的に、和の記号を用いて次のように表せる：


 コンピュータでの十六進表記 

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

後者には、十六進表記がよく用いられ、二進表記の4桁が1桁で表現できるので、二進表記より短く表すことができる。1オクテットは、2桁の十六進表記(00)16〜(ff)16で表現することができる。

十六進表記の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他文字リテラルや文字列リテラル中で文字コードを記述する場合。#x1000整数値の外部表現。&#x1000;文字実体参照として文字コードを記述する場合。1000h あるいは 1000Hアセンブリ言語（インテル製）整数イミディエートを記述する場合。この表記の場合、十六進表記が英字 (A〜F) で始まるときは、変数名などと区別するため、先頭に 0 を付けねばならないことがある。例: 0A000H&h1000（マイクロソフト製）整数リテラルを記述する場合。$1000（マイクロソフト製以外）
 （一部の処理系）整数リテラルを記述する場合。主にモトローラ系のアセンブリ言語・マイコン類の資料。

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

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

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

時期機種1011121314151950年代Bendix-14など複数0123451950SWACuvwxyz1956Bendix G-15uvwxyz1952ILLIAC IKSNJFL1956Librascope LGP-30FGJKQW1957Honeywell bcdefg1967Elbit 100BCDEFG1960STUVWX1960NEC NEAC 1103DGHJKV1964Pacific Data Systems 1020LCASMD1980(ソビエトのプログラム電卓)−LCГE" "スペース記号

 1968年にが新たな表記を定義した。この表記は普及しなかった。
 ブルックヘブン国立研究所のBruce Alan Martinは A〜F による表記に不快感を示し、ビット配列に基づいた全く新しい数字を考案して1968年にCACMへ提案したが、賛同者は少なかった。
 7セグメントディスプレイでは、B,Dを8,0と区別するためb,dと小文字で表示する方法が採られた。

 Bioctal 表記法 

2022年4月1日に発行されたによって提案された新しい十六進数の表記法として、Bioctal がある（ジョークRFCも参照）。

この表記法では、十六進数を以下の表のように表記することとしている。
英字は基本的に小文字で表記する。

+ Bioctal の表記法 0 から 7  0  1  2  3  4  5  6  7 8 から 15  c  j  z  w  f  s  b  v

これらの文字は、表の上段の数字と（そのままで、あるいは九十度回転させて）形が似ている英字、かつ見分けにくい L（エル）の小文字や母音などを避けて決められている。
上記表では８個の項目で折り返しているため、上下の数値の下三ビットは同じ値になる。
これにより、十六進数を八進数や二進数に変換するときの認知心理学的負荷を軽減させることができるとしている。

 底の変換 
 二・八・十・十二進表記との対応 
 十六進表記  十二進表記  十進表記  八進表記  二進表記 (0)16  (0)12 (0)10  (0)8  (0)2 (1)16  (1)12 (1)10  (1)8  (1)2 (2)16  (2)12  (2)10  (2)8  (10)2 (3)16  (3)12  (3)10  (3)8 (11)2 (4)16  (4)12 (4)10  (4)8  (100)2 (5)16  (5)12  (5)10  (5)8  (101)2 (6)16  (6)12 (6)10  (6)8  (110)2 (7)16  (7)12 (7)10  (7)8  (111)2 (8)16  (8)12  (8)10  (10)8  (1000)2 (9)16  (9)12 (9)10  (11)8  (1001)2 (A)16  (A)12 (10)10  (12)8  (1010)2 (B)16  (B)12  (11)10  (13)8  (1011)2 (C)16  (10)12 (12)10  (14)8  (1100)2 (D)16  (11)12  (13)10  (15)8  (1101)2 (E)16  (12)12 (14)10  (16)8  (1110)2 (F)16  (13)12 (15)10  (17)8  (1111)2

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

 整数部分 

 二進表記を右から順に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 である。この方法は桁数に関わらず通用する。

 十進数から十六進数への変換 

 正の整数 
正の整数 m を十進法から十六進法に変換するのは次のようにする。
 m を x に代入する。
 x を 16 で割って、余りを求める。
 x/16 の商を x に代入する。
 1. に戻る。x = 0 であれば終了。
余りを求めた順の逆に並べると、それが十六進法に変換された結果になる。

例:36864を十六進法に変換する。


 16)36864　 　36864=160×36864
 16) 2304…0　36864=161× 2304+160×0
 16) 144…0　36864=162× 144+161×0+20×0
 9</span>…9　36864=163× 9+162×0+21×0+20×0


よって 3686410 = 900016 である。

倍数の法則
末尾が0、2、4、6、8、A、C、Eは偶数。
末尾が0、4、8、Cは複偶数（4の倍数）。
末尾が0、8は8の倍数。
末尾が0は1610の倍数。
下2桁が00は25610の倍数。
3の倍数は十進法と同じく数字和が3の倍数。
5の倍数は六進法と同じく数字和が5の倍数。
1510の倍数は数字和が15の倍数。
4810の倍数は末尾0で数字和が3の倍数。
8010の倍数は末尾0で数字和が5の倍数。
24010の倍数は末尾0で数字和が15の倍数。
76810の倍数は下2桁00で数字和が3の倍数。
128010の倍数は下2桁00で数字和が5の倍数。
384010の倍数は下2桁00で数字和が15の倍数。

小数と除算
割り切れない小数の循環部は下線で示す。「10」となる十六には因数に奇数が含まれていないため、1/3や1/5といった「1÷奇数」が全て割り切れない。小数を分数化しても、「m/奇数」となる小数が全く現れない。従って、偶数も、1/6｛1÷(2×3)｝や1/A｛1÷(2×5)｝といった「1÷奇数で割り切れる偶数」は割り切れない。六の倍数も十の倍数も逆数にすると全て割り切れないので、単位分数は無限小数が充ち溢れ、逆数が有限小数になる例は2の冪数だけになる。

+十六進小数の分数化十六進小数六進既約分数十進既約分数六進小数十進小数十二進小数二十進小数0.11/241/160.02130.06250.090.150.21/121/80.0430.1250.160.2A0.33/243/160.10430.18750.230.3F0.41/41/40.130.250.30.50.55/245/160.15130.31250.390.650.63/123/80.2130.3750.460.7A0.711/247/160.23430.43750.530.8F0.81/21/20.30.50.60.A0.913/249/160.32130.56250.690.B50.A5/125/80.3430.6250.760.CA0.B15/2411/160.40430.68750.830.DF0.C3/43/40.430.750.90.F0.D21/2413/160.45130.81250.990.G50.E11/127/80.5130.8750.A60.HA0.F23/2415/160.53430.93750.B30.IF

+小数への変換と除算（3の冪数）N進法Nの素因数分解1/31/9(1÷3)(1/27)(1÷3)100÷3100÷9100÷3十六進法20.5555…0.1C7…0.097B425ED…（1÷1B）55.5555…1C.71C…9.7B425ED09…（100÷1B）六進法2×30.20.04（1÷13）0.012（1÷43）221.2（1104÷3）44.24（1104÷13）13.252（1104÷43）十二進法2×30.40.140.054（1÷23）71.4（194÷3）24.54（194÷9）9.594（194÷23）

+小数への変換と除算（5の冪数）N進法Nの素因数分解1/5(1/25) (1÷5)100÷5100÷5十六進法20.3333…0.0A3D7…（1÷19）33.3333…A.3D70A…（100÷19）十進法2×50.20.04（1÷25）51.2（256÷5）10.24（256÷25）二十進法2×50.40.0G（1÷15）2B.4（CG÷5）A.4G（CG÷15）

 その他の計算例
 被除数がB（十進法の11）
 十六進法：B ÷ 3 = 3.AAAA…
 十六進法：B ÷ 5 = 2.3333…
 六進法：(15) ÷ 3 = 3.4
 十二進法：B ÷ 3 = 3.8
 十進法：(11) ÷ 5 = 2.2
 二十進法：B ÷ 5 = 2.4
 被除数が8E（十進法の142）
 十六進法：(8E) ÷ 3 = 2F.5555…
 十六進法：(8E) ÷ 5 = 1C.6666…
 六進法：(354) ÷ 3 = 115.2
 十二進法：(BA) ÷ 3 = 3B.4
 十進法：(142) ÷ 5 = 28.4
 二十進法：(72) ÷ 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 F  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 0  F  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のドキュメントにも同様の記述がある）。Merriam-Webster's Collegiate Dictionaryにおけるhexadecimalの初出は1954年で、当初より現在に至るまで国際科学用語ISVに分類されている。ギリシャ語とラテン語を混ぜ合わせた造語法はISVでは一般的にみられる。六十進法を意味するsexagesimalはラテン語の接頭子を保っている。ドナルド・クヌースはラテン語で16進数を表すとするならばsenidenaryか、または恐らくsedenaryが正しいのではないかとしている（同じ作り方で考えればbinary (2進数)、ternary (3進数)、quaternary (4進数)となり、この流れでいえばdecimal (10進数)とoctal (8進数)も、それぞれdenaryとoctonaryが正しいことになる）Knuth, Donald. (1969). The Art of Computer Programming, Volume 2. . (Chapter 17.)。アルフレッド・B・テイラーは16進数を不便な数字だとして嫌っていたが、19世紀にsenidenaryとして16進数を研究していた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.。シュワルツマンによると、ラテン語から考えればsexadecimalが自然だが、コンピュータのハッカーたちは略語にsexを使うだろうと話したSchwartzman, S. (1994). The Words of Mathematics: an etymological dictionary of mathematical terms used in English. .。語源的に完全ギリシャ語で考えればhexadecadic（ ）が正しいと考えられる（ただし現代のギリシャではdecahexadic（ ）が使われている）。

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

ヤード・ポンド法では、質量の単位に十六進法が用いられる。
 1 ポンド = 16 オンス。
 1 オンス = 16 ドラム。

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

 ギャラリー 

 脚注 

 関連項目 
 コンピュータの数値表現
 バイナリエディタ
 十六進化時間（:en:Hexadecimal time）
 一進法
 十二進法
 六十進法
 2の冪
 二進法
 四進法
 八進法
 三十二進法
 六十四進法

Category:数の表現
Category:コンピュータの算術
Category:数学に関する記事
Category:呼称問題
Category:位取り記数法