简短的回答
十六进制(以 16 为底)使用数字 0-9 和字母 A-F,其中每个位置代表 16 的幂。十六进制的 FF 等于十进制的 15×16 + 15 = 255 — 单个字节可以容纳的最大值。程序员使用十六进制是因为它干净地映射到二进制:一个十六进制数字始终等于 4 位,因此两个十六进制数字代表一个完整字节。
要点
- 两个十六进制数字等于一个字节(8 位)——从 00 到 FF(0 到 255)的值——这就是为什么内存地址、字节值和颜色代码几乎总是以十六进制显示。
- 将十六进制转换为二进制是机械的:将每个十六进制数字替换为其 4 位二进制等效值并将它们连接在一起。
- 十六进制算术遵循与十进制算术相同的进位和借位逻辑,只是基数为 16 而不是 10。
- Web 颜色 (#RRGGBB) 将三个字节值(红色、绿色、蓝色)打包为六个十六进制数字,每个颜色通道两个。
十六进制数字值 (0-F)
| 十六进制 | 十进制 | 十六进制 | 十进制 |
|---|---|---|---|
| A | 10 | D | 13 |
| B | 11 | E | 14 |
| C | 12 | F | 15 |
将十进制转换为十六进制
202 ÷ 16 = 12 余数 10 → A
12 ÷ 16 = 0 余数 12 → C
从下到上读取余数:CA
所以十进制 202 等于十六进制 CA。反向检查:C×16 + A = 12×16 + 10 = 192 + 10 = 202 — 确认转换。
工作示例:十六进制加法
3A+1F
A(10) + F(15) = 25 = 1×16 + 9 → 写入9,进位1
3 + 1 + 进位 1 = 5
结果:59
以十进制检查:3A = 58、1F = 31 和 58 + 31 = 89,即 5×16 + 9 = 0x59 — 与十六进制算术完全匹配。与十进制加法的唯一真正区别是,一旦列达到 16,而不是 10,就会发生进位。
要避免的常见错误
- 出于习惯,进位为 10,而不是 16 — 十六进制列在其值达到 16 时进位,而不是像十进制那样进位 10。
- 假设单个十六进制数字是一位 — 它始终代表 4 位,因为 16 = 2⁴。
- 在固定宽度字节或颜色通道上删除前导零 - 0x0A 和 0xA 是相同的值,但两位数字节显示需要 0A,而不是 A。
- 混合数字大小写不一致 - 十六进制不区分大小写 (a = A = 10),但坚持使用一种大小写可以避免较长值中的视觉混乱。