一句话解释十六进制
十六进制是一种基数为 16 的位置计数法:每一位的位权是其右边一位的 16 倍(逢十六进一),数值 10 到 15 用字母 A 到 F 表示。为了标明一个数是十六进制,程序员会写成 0x1A(C、Java、JavaScript、Python),CSS 颜色写作 #1A2B3C,汇编语言中写作 1Ah,数学中则写作 1A₁₆。
十六进制数字 0 到 15 对照表
| 十进制 | 十六进制 | 二进制 | 十进制 | 十六进制 | 二进制 |
|---|---|---|---|---|---|
| 0 | 0 | 0000 | 8 | 8 | 1000 |
| 1 | 1 | 0001 | 9 | 9 | 1001 |
| 2 | 2 | 0010 | 10 | A | 1010 |
| 3 | 3 | 0011 | 11 | B | 1011 |
| 4 | 4 | 0100 | 12 | C | 1100 |
| 5 | 5 | 0101 | 13 | D | 1101 |
| 6 | 6 | 0110 | 14 | E | 1110 |
| 7 | 7 | 0111 | 15 | F | 1111 |
如何用十六进制计数
十六进制的计数方式和十进制类似,只不过要到 F 之后才进位,而不是 9 之后:… 8、9、A、B、C、D、E、F、10、11 … 19、1A … 1F、20 … FF、100。这里的 10 表示十六,100 表示 16 × 16 = 256。两位十六进制数字可以表示一个字节(00–FF = 0–255),四位最大到 FFFF = 65,535,八位最大到 FFFFFFFF = 4,294,967,295。
计算机为什么使用十六进制
计算机中的一切都以二进制存储,但一长串 0 和 1 不仅难以阅读,还容易输错。因为 16 = 2⁴,一位十六进制数字恰好代表四个二进制位(半字节),两位十六进制数字代表一个字节。十六进制和二进制之间的转换只需逐位查表,而且十六进制的长度只有二进制的四分之一:1101 1110 1010 1101 就是 DEAD。十进制与二进制之间没有这样简洁的对应关系,所以很少用来表示原始数据。
十六进制与十进制的相互转换
- 十六进制转十进制:把每一位数字乘以 16 的相应次幂再相加:
2F= 2 × 16 + 15 = 47,1A3F= 1 × 4096 + 10 × 256 + 3 × 16 + 15 = 6719。 - 十进制转十六进制:反复除以 16,再倒序读出余数:200 ÷ 16 = 12 余 8,而 12 = C,所以 200 =
C8。 - 十六进制转二进制:把每一位数字替换为对应的 4 位二进制:
2F=0010 1111。
我们的转换器可以即时完成以上所有换算,并展示每一个步骤。
十六进制的常见用途
- 网页颜色:
#FF6347表示红色FF、绿色63和蓝色47。 - 内存地址:调试器和崩溃报告中会显示
0x7FFE5A3C这样的指针。 - MAC 地址:由六个字节组成,例如
00:1A:2B:3C:4D:5E,用于标识网卡。 - IPv6 地址:由八组四位十六进制数字组成,例如
2001:db8::1。 - Unicode:每个字符都有一个十六进制码位,例如
U+00E9是 é,U+1F600是 😀,汉字“中”是 U+4E2D。 - 哈希值和 ID:SHA-256 哈希值由 64 个十六进制字符组成,UUID 和 Git 提交 ID 也用十六进制书写。
- 十六进制转储:十六进制编辑器会逐字节显示文件内容;每个 PDF 文件都以
25 50 44 46(“%PDF”)开头。 - 错误代码:Windows 会报告
0x80070005(拒绝访问)这样的错误代码。
十六进制、十进制、八进制与二进制对比
| 进制 | 基数 | 数字 | 255 的写法 | 典型用途 |
|---|---|---|---|---|
| 二进制 | 2 | 0–1 | 11111111 | 硬件、标志位 |
| 八进制 | 8 | 0–7 | 377 | Unix 文件权限(chmod 755) |
| 十进制 | 10 | 0–9 | 255 | 日常计数 |
| 十六进制 | 16 | 0–9、A–F | FF | 字节、颜色、地址、哈希值 |
十六进制中的负数
十六进制本身没有专门的负数表示方式,所以负数通常以补码形式存储:固定长度数值的最高位表示它是负数。作为有符号字节时,7F 是 127,80 是 −128,FF 是 −1;作为 32 位整数时,FFFFFFFF 是 −1。在数学中以及我们的计算器里,也可以直接写负号:−1A = −26。
常见问题
十六进制为什么要用字母?
十六进制需要十六个单字符数字,但阿拉伯数字只有十个,所以用字母 A–F 表示数值 10–15。大写和小写含义相同:ff = FF = 255。
数字前面的 0x 是什么意思?
在 C、C++、Java、JavaScript、Python 等众多编程语言中,0x 前缀表示这个数是十六进制:0x10 是 16,而不是 10。CSS 颜色则用 # 表示,汇编代码中常在末尾加 h(10h)。
十六进制和 Base64 一样吗?
不一样。十六进制把每个字节写成两个 0–9 或 A–F 中的字符,因此数据体积会翻倍,但便于逐字节阅读。Base64 使用 64 种字符,把 3 个字节打包成 4 个字符,更加紧凑(体积只增加约 33%),但无法逐字节阅读。
最后更新: