二进制、十进制、十六进制:开发者速查表
提供高频进制转换模式、4 位分组技巧、常见数值示例和调试思路,帮助你快速完成二进制、十进制与十六进制互转,并减少手算错误。
二进制、十进制和十六进制通常表示的是同一个数值,只是写法不同。例如十进制 42、十六进制 0x2A 和二进制 00101010 在这里表示同一个无符号数。
调试内存、协议字段、位掩码或颜色值时,最实用的技巧不是背长表,而是记住:1 个十六进制位正好对应 4 个二进制位。
三种进制先分清
- 二进制(base 2)只使用
0和1。 - 十进制(base 10)是日常使用的
0-9。 - 十六进制(base 16)使用
0-9和A-F,其中A=10、F=15。 0x是常见的十六进制前缀,但它不是数值本身的一部分。
两个十六进制位可以表示一个完整字节:00 到 FF 对应二进制 00000000 到 11111111。
4 位二进制与十六进制速查
| 二进制 | 十六进制 | 二进制 | 十六进制 |
|---|---|---|---|
0000 |
0 |
1000 |
8 |
0001 |
1 |
1001 |
9 |
0010 |
2 |
1010 |
A |
0011 |
3 |
1011 |
B |
0100 |
4 |
1100 |
C |
0101 |
5 |
1101 |
D |
0110 |
6 |
1110 |
E |
0111 |
7 |
1111 |
F |
这里的 A-F 是十六进制数字,不能翻译成其他字符。二进制位串、十六进制字面量和代码示例也应按原值保留。
示例 1:0x2A → 二进制 → 十进制
先去掉书写前缀 0x,只看 2A:
2 → 0010A → 1010- 合并得到
00101010
再按二进制位权计算:32 + 8 + 2 = 42。所以:
0x2A = 00101010₂ = 42₁₀
如果要用站内工具验证,在十六进制转二进制中输入 2A,不要输入 0x2A。
示例 2:十进制 42 → 二进制和十六进制
把 42 拆成 2 的幂:
42 = 32 + 8 + 2
对应位写成 1,可得到 101010。如果把它放进一个 8 位字段,应补齐为 00101010。
再按 4 位分组:0010 1010 → 2 A,因此十六进制是 2A。
可以分别用十进制转二进制、二进制转十六进制或通用进制转换器验证。
位宽和符号是最容易忽略的上下文
同一串位在不同解释下可能表示不同的数:
11111111作为 8 位无符号整数是255。11111111作为 8 位二进制补码有符号整数是-1。0000000011111111作为 16 位有符号整数则是255。
因此看到十六进制或二进制字段时,不要只问“它等于多少”,还要确认位宽、是否有符号、字节序以及数据类型。负数的固定宽度表示可用二进制补码转换器检查。
常见调试值
| 十进制 | 十六进制 | 8 位二进制 | 常见含义 |
|---|---|---|---|
| 0 | 0x00 |
00000000 |
全部位清零 |
| 15 | 0x0F |
00001111 |
低 4 位全 1 |
| 42 | 0x2A |
00101010 |
本文示例 |
| 127 | 0x7F |
01111111 |
8 位有符号正数上限 |
| 128 | 0x80 |
10000000 |
最高位被置 1 |
| 255 | 0xFF |
11111111 |
一个字节全部位为 1 |
什么时候用哪个转换器
- 已有二进制,想看普通数值:用二进制转十进制。
- 已有十进制整数,想看位模式:用十进制转二进制。
- 在位串和十六进制转储之间切换:用二进制转十六进制或十六进制转二进制。
- 需要一次处理 2 到 62 进制:用通用进制转换器。
- 位串代表负数或固定宽度有符号整数:用二进制补码转换器。
如果你的目标不是数值,而是把文本变成字节和位,需要先确定字符编码。可以继续看 ASCII、Unicode 与 UTF-8 的区别。