核心答案:进制互转三条路——任意进制转十进制"按位乘基数的幂再相加";十进制转任意进制"连除基数取余倒排";二进制↔十六进制"4 位一组直译"。0b1011=11,0x2F=47,255=0xFF。
四大进制对照表
| 十进制 | 二进制 | 八进制 | 十六进制 |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 7 | 111 | 7 | 7 |
| 8 | 1000 | 10 | 8 |
| 10 | 1010 | 12 | A |
| 15 | 1111 | 17 | F |
| 16 | 10000 | 20 | 10 |
| 100 | 1100100 | 144 | 64 |
| 255 | 11111111 | 377 | FF |
| 256 | 100000000 | 400 | 100 |
| 1024 | 10000000000 | 2000 | 400 |
二进制转十进制(位权展开)
0b101101 = 1×2⁵+0×2⁴+1×2³+1×2²+0×2¹+1×2⁰ = 32+8+4+1 = 45
速算口诀:从右往左位权 1、2、4、8、16、32、64、128,把 1 对应的位权加起来。
十进制转二进制(除 2 取余)
100 → 二进制:100÷2=50余0 → 50÷2=25余0 → 25÷2=12余1 → 12÷2=6余0 → 6÷2=3余0 → 3÷2=1余1 → 1÷2=0余1
余数倒排:0b1100100 ✓(64+32+4=100)
十六进制转换
- 二转十六:4 位一组。0b1011 1100 → B C → 0xBC = 188
- 十六转十:按位乘 16 的幂。0x2F = 2×16+15 = 47
- 十转十六:除 16 取余。255÷16=15余15(F),15÷16=0余15(F) → 0xFF
实用场景
| 场景 | 常用进制 | 例子 |
|---|---|---|
| 网页颜色 | 十六进制 | #FF8800 |
| 文件权限 | 八进制 | chmod 644 |
| 内存/地址 | 十六进制 | 0x7FFE |
| 位运算 | 二进制 | 0b1100 & 0b1010 |
| 日常计数 | 十进制 | — |
常见误区
- 0x10=10:错,0x10=16;十六进制的"10"就是十六。
- 余数正排:十转二必须倒排余数,正排结果完全错误。
- 8、9 出现在八进制:八进制只有 0-7,"0o18" 是非法写法。
- 小数部分用同样方法:小数转二进制用"乘 2 取整",如 0.625→0b0.101,和整数方法不同。
用[进制转换计算器](/c/math/base-convert)实时互转二/八/十/十六进制。