十六進法
十六進(位取り)記数法(じゅうろくしん-くらいどり-きすうほう、hexadecimal)あるいは簡単に十六進法(じゅうろくしんほう)とは、数の表記法の一種で、十六を基数とする位取り記数法である。
名目上の十六進法は、一桁に十六個の数字を収め、十六倍毎に桁を繰り上げるものとなる。この際、"0" から "9" までと "A"(十)から "F"(十五)までの十六個の数字を用い、十六を "10" と表記する方法となる。この位取りによる表記法を十六進表記といい、十六進表記で記された数を十六進数という。十六進数50 は十進数80(= 五倍の十六)を、十六進数B4 は十進数180(= 十一倍の十六 + 四)を、十六進数100 は十進数256(= 十六倍の十六)を意味する。(簡単に、5016=8010 、B416=18010 、10016=25610などで表すこともある。後述)
コンピュータの十六進法
コンピュータでは、桁数で十六進表記を用いる事が多い。殆どの場合、大文字の A - F と小文字の a - f を区別せず使用する。二進数の四桁と十六進数の一桁が一対一で対応し、二進数程には表現が冗長にならないため、二進数の代替としてコンピュータの世界で、しばしば用いられる。
一バイトの値は十六進数二桁で表記できる。十六進数の一桁はニブルとも呼ばれる。二進化十進数では、十六進数の一桁が十進数の一桁に対応する。
二進数・十進数との対応
|
---|
二進数から十六進数への基数変換
二進数から十六進数へ変換する事が度々あるので、ここでその方法を解説する。
整数部分
- まずは二進数を右から順に四桁ずつ区切っていく。もし四桁未満であれば、空いた部分(左側)には全て零が来ると見なす。
- 11010 → 1, 1010 → 0001, 1010
- 続いて、一区切り毎に十進数に変換していく。ポイントは、各桁の重み。左から:8 (二の三乗) → 4 (二の二乗) → 2 (二の一乗) → 1 (二の零乗)
- 左側:1の桁のみON(1) になっているので1、右側:8の桁と2の桁がONなので 8 + 2 = 10
- 出た結果を十六進数に変換する。
- 左側:1、右側:10 = A
- 故に、1A が答えとなる。
慣れてくると四桁の二進数から一桁の十六進数への変換は、毎回計算しなくても覚えてしまうことが多い。
※この方法は何桁であっても通用する。例えば、100110010111010は0100, 1100, 1011, 1010、よって4CBAとなる。
小数部分
ここでは、0以上1未満の小数部分の変換方法について説明する。
- まずは二進数を小数点を基準に左から順に四桁ずつ区切っていく。もし四桁未満であれば、空いた部分(右側)には全て零が来ると見なす。
- 0.11 → 0. , 1100
- 続いて、一区切り毎に十進数に変換していく。ポイントは、各桁の重み。左から:8 (二の三乗) → 4 (二の二乗) → 2 (二の一乗) → 1 (二の零乗)
- 8の桁と4の桁がONなので 8 + 4 = 12
- 出た結果を十六進数に変換する。
- 右側:12 = C
- 故に、0.C が答えとなる。
※この方法は小数部分が何桁であっても通用する。
表記方法
一般の記数法で基数を明示して書く時は、基数を十進表記で下付きで123416または1234(16)のように表記し、「十六進数のいちにさんよん」と読む。この方法で行くと、例えば、四十八は、4810、4012、3016、2820、と置き換えられる。
小数は、十進数と同様に小数部をピリオドで区切る。例えば0.510は、0.612、0.816、0.A20となる。
その他の表記方法は次の通り。それぞれ下付きの文字を使わずに表記できるように工夫されている。
- 0x1000 (C言語やC言語ライクな文法の言語、例えばC++・Java)
- x1000 (htmlの実体参照における表記。例:က)
- 1000h あるいは 1000H (Pascal・アセンブリ言語・マイコン類の資料にて言語を特定しない際の表記として)
- &h1000 (BASIC、とりわけマイクロソフト系のもの)
- $1000 (上記以外のBASIC ・マイコン類)
読み方は文字並びのまま「ぜろエックスいちぜろぜろぜろ」などと読む。どちらかといえば好ましくないが、慣用で「ヘキサの千(セン)」もしくは「千(セン)ヘキサ」と言った読み方も行われている。
上記数字につく h や x はhexadecimalから取ったものである。十六進数であることを明示し、二進数(b)や八進数(o)、十進数(d)などと区別するために用いる。
単位系
単位系の十六進法では、十進法を援用して十個の数字のみを用い、十六に至ると単位を繰り上げる方法を採る事も多い。