核心答案:进制转换核心三组——十转二"除 2 取余倒着读"(25→11001),二转十六"4 位一组查表"(11111111→FF),十六转十"按位乘 16 的幂"(0xFF=255)。记住 0xFF=255、0x10=16、1024=2¹⁰ 三个锚点。

四种进制基础

进制数字范围前缀例子
二进制0-10b0b1010=10
八进制0-70o0o17=15
十进制0-942
十六进制0-9 A-F0x0x2A=42

十进制转二进制(除 2 取余)

例:25 → 二进制
除法余数
25÷2121 ↑
12÷260 ↑
6÷230 ↑
3÷211 ↑
1÷201 ↑

余数从下往上读:25 = 0b11001 ✓(16+8+1=25)

二进制与十六进制互转(4 位一组)

二进制的 4 位恰好是十六进制的 1 位(2⁴=16):

二进制十六进制十进制
0000-01110-70-7
100088
1010A10
1111F15

:0b11111111 = 1111 1111 → 0xFF = 255;0x3C = 0011 1100 = 0b111100 = 60。

实战应用场景

场景进制例子
颜色值十六进制#FF8800 = rgb(255,136,0)
权限 chmod八进制755 = rwxr-xr-x
IP/子网二进制255.255.255.0=/24
内存地址十六进制0x7FFF5FBFF8A8
位运算掩码二进制flags & 0b0100

补码与负数

计算机用补码存负数:−x = 按位取反 + 1。

  • 8 位系统中 −1 = 0b11111111(即 0xFF)
  • 这就是为什么 byte 溢出时 127+1 变成 −128
  • 位运算 ~5 = −6(取反后解释为有符号数)

常见误区

  1. 0x10 读作"十":0x10 = 16!十六进制的 10 是十六。
  2. A-F 大小写混淆:0xFF 与 0xff 等值,代码规范通常大写。
  3. 八进制前导 0:老代码里 0755 是八进制,010 = 8 不是 10(JS 已废弃这种写法)。
  4. 手转大数硬算:大数用"除 16 取余"或编程工具,别硬除 2。

用[进制转换工具](/c/dev/base-convert)在二/八/十/十六进制间实时互转。