十六进制

来自GSXAB的知识库
十六进制
术语名称 十六进制
英语名称 hexadecimal numeral system
别名 base-16 numeral system, hexadecimal
十六进制的
术语名称 十六进制的
英语名称 hexadecimal
别名 base-16, hex
十六进制数
术语名称 十六进制数
英语名称 hexadecimal number

十六进制(hexadecimal, base-16, 缩写为 hex)记数系统指基数为 16 的进位制记数法。是指通过 0~9 及 A~F 十六个符号表达数值的满十六进一的记数方法。

由于十六进制可以作为二进制的缩写,计算机科学常常会使用十六进制表达二进制数据。

本文仅指数学上的进制,作为编码的 base16 见 RFC 4648

定义

基数为 16 的进位制记数法称为十六进制记数法(hexadecimal numeral system, base-16 numeral system, 简称 hexadecimal, base-16)。

十六进制记数法下的数称为十六进制数(hexadecimal numeral)。

类似地,“十六进制系统相关的”往往使用十六进制的(hexadecimal, 常缩写为 hex, 或 base-16)作为前缀。

表示

十六进制中的每一位只含有十六个符号,按通常习惯,会使用阿拉伯数字 0~9 及拉丁字母 A~F 。尽管存在其他选择,较为广泛接受的仍然是前 6 个拉丁字母。在写成数形式时,遵从进位制记数法的一般规则,由权重更高的位到权重更低的位写成一串,且存在小数部分时在位权为 [math]\displaystyle{ 16^0=1 }[/math] 的位后添加小数点。如 [math]\displaystyle{ 27C }[/math]

若需要指出具体进制时,可使用一般的添加进制下标的形式,即 [math]\displaystyle{ 27C_{16} }[/math][math]\displaystyle{ (27C)_{16} }[/math] 。也有人使用缩写下标或后缀,即 [math]\displaystyle{ 27C_\mathrm{hex} }[/math][math]\displaystyle{ 27C\mathrm{h} }[/math]

编程语言,特别是受到 C 语言影响的编程语言中,十六进制数通常加前缀 0x0X ,即 0x27C0X27C

分隔符

有时对十六进制数使用类似千位分隔符的方式分段以便阅读。在通常情况下,由于二进制数据以字节形式 8 位一组地出现,会按照每 4 位二进制数一段进行分隔,也就是 1 个十六进制位。通常写数字时不会出现较大的十六进制数字,但在表示二进制数据时会出现,此时按字节分段,即每两个十六进制位处进行分隔。

数值及表示

位权

对十六进制数,其小数点前的数位的位权为 1 ,向高位依次为 [math]\displaystyle{ 16,16^2,16^3,\cdots }[/math]

如果存在小数部分,则向低位也依次为 [math]\displaystyle{ 16^{-1},16^{-2},16^{-3},\cdots }[/math]

十六进制转换为十进制

计算一个十六进制数的十进制表示时,可以通过计算对应位权相加的方式,即 [math]\displaystyle{ a_n 16^n + a_{n-1} 16^{n-1} + \cdots + a_1 16^1 + a_0 }[/math] ,也可以通过 Hornor 法则将其看作多项式求值 [math]\displaystyle{ ((\cdots(a_n x + a_{n-1}) x + \cdots + a_1) x + a_0) \mid_{x=16} }[/math]

二进制转换为十六进制

因为 16 本身是 2 的幂,这使得二进制-十六进制混合进制是 2 进制本身。将一个二进制数按照位权为 1 的数位对齐的方式划分成 4 个一组的形式,则新的形式就可以看成一个十六进制数,且其中每一位数都进一步地通过 4 位二进制数表示。将这些二进制数表示对应地换成十六进制中的符号,就得到了对应整个数的十六进制表示。

十六进制转换为二进制

以上过程的逆过程,将十六进制数每一位上的符号替换为 4 位二进制数(位数不足则补 0 ),就得到了一个被 4 位分隔的二进制数。

一些常见数值表示

对有限小数,不列出其对应的无限循环小数形式。

整数(十进制) 整数(十六进制) 分数(十进制) 小数(十六进制)
1 1 1/1 1
2 2 1/2 0.8
3 3 1/3 [math]\displaystyle{ 0.\overline{5} }[/math]
4 4 1/4 0.4
5 5 1/5 [math]\displaystyle{ 0.\overline{3} }[/math]
6 6 1/6 [math]\displaystyle{ 0.2\overline{\mathrm{A}} }[/math]
7 7 1/7 [math]\displaystyle{ 0.\overline{249} }[/math]
8 8 1/8 0.2
9 9 1/9 [math]\displaystyle{ 0.\overline{1\mathrm{C}7} }[/math]
10 A 1/10 [math]\displaystyle{ 0.1\overline{9} }[/math]
11 B 1/11 [math]\displaystyle{ 0.\overline{1745\mathrm{D}} }[/math]
12 C 1/12 [math]\displaystyle{ 0.1\overline{5} }[/math]
13 D 1/13 [math]\displaystyle{ 0.\overline{13\mathrm{B}} }[/math]
14 E 1/14 [math]\displaystyle{ 0.1\overline{249} }[/math]
15 E 1/15 [math]\displaystyle{ 0.\overline{1} }[/math]
16 10 1/16 0.1
17 11 1/17 [math]\displaystyle{ 0.\overline{0\mathrm{F}} }[/math]
18 12 1/18 [math]\displaystyle{ 0.0\overline{\mathrm{E}38} }[/math]
19 13 1/19 [math]\displaystyle{ 0.\overline{0\mathrm{D}79435\mathrm{E}5} }[/math]
20 14 1/20 [math]\displaystyle{ 0.0\overline{\mathrm{C}} }[/math]


记数系统
位值制记数法 进位制记数法/标准位值制记数法(进制) 二进制八进制十进制十六进制、……
非标准位值制记数法 带符号进位制记数法/
平衡记数法(平衡进制)
平衡三进制、……
双射记数法(双射进制) 一进制双射十进制双射二十六进制、……
位权是幂
但基数不是自然数
(非自然数进制)
[math]\displaystyle{ -2 }[/math][math]\displaystyle{ -4 }[/math] 、……
[math]\displaystyle{ \sqrt{2} }[/math][math]\displaystyle{ \sqrt{3} }[/math][math]\displaystyle{ \sqrt[12]{2} }[/math] 、……
[math]\displaystyle{ 2i }[/math][math]\displaystyle{ \sqrt[4]{2}i }[/math][math]\displaystyle{ 2\omega }[/math][math]\displaystyle{ \sqrt[3]{2}\omega }[/math][math]\displaystyle{ -1\pm i }[/math] 、……
位权不是幂(混合进制 二五混合进制阶乘进制、……
其他 [math]\displaystyle{ p }[/math]-进数
质数记数法、……
符值制记数法 罗马记数法希腊记数法、……