二进制、十六进制完整指南:数字进制的原理、转换方法与编程应用

计算机的世界充满了进制的影子:CSS 里的 #1A2B3C、内存地址 0x7FFFFFFF、Base64 编码、URL 的 %20……这些看似神秘的字符串,背后都是同一个概念——进制(Number Systems)。理解它,你就能读懂更多底层技术的逻辑。

一、什么是进制?

进制是"用多少个符号来表示数字"的规则。我们日常使用十进制(Base-10),因为有 0–9 共 10 个符号;当数到 9 的下一个,就"进位"变成 10。

同理:

  • 二进制(Base-2):只有 0 和 1,数到 1 的下一个就进位,变成 10(读作"一零",代表十进制的 2)
  • 八进制(Base-8):符号 0–7,数到 7 下一个进位
  • 十六进制(Base-16):符号 0–9 加上 A–F(A=10, B=11, …, F=15),数到 F 下一个进位
十进制二进制八进制十六进制
0000000
1000111
81000108
10101012A
15111117F
16100002010
25511111111377FF

二、二进制(Base-2)

二进制是计算机硬件的语言。电路只有"通电"与"断电"两种状态,正好对应 1 和 0。每一个 0 或 1 称为一个位(bit),8 个位组成一个字节(byte)

十进制转二进制

方法:反复除以 2,记录余数,由下往上读。

13 ÷ 2 = 6 余 1  ↑
 6 ÷ 2 = 3 余 0  ↑
 3 ÷ 2 = 1 余 1  ↑
 1 ÷ 2 = 0 余 1  ↑
结果:1101(十进制 13 = 二进制 1101)

二进制转十进制

方法:每一位乘以 2 的对应次方,加总。

1101 = 1×2³ + 1×2² + 0×2¹ + 1×2⁰
     = 8 + 4 + 0 + 1
     = 13
实际应用:文件的 checksum(如 SHA-256)底层计算都是位运算。输出的长串十六进制字符串,本质上就是二进制哈希值的十六进制表示。可用Checksum 工具生成文件的哈希值并验证完整性。

三、十六进制(Base-16)

十六进制是编程中最常见的进制,因为它和二进制之间有完美的对应关系:每 4 个位恰好对应一个十六进制数字

二进制:1111 1010 1011 1100
十六进制:   F    A    B    C  → FABC

这让十六进制成为表达内存地址、颜色码、哈希值的理想格式——既比二进制短,又和底层二进制有直接的对应。

十进制转十六进制

方法:反复除以 16,余数 10–15 用 A–F 表示。

255 ÷ 16 = 15 余 15(F)  ↑
 15 ÷ 16 =  0 余 15(F)  ↑
结果:FF(十进制 255 = 十六进制 FF)

实际案例:CSS 颜色码

CSS 颜色码 #FF5733 是三对十六进制数字,分别代表 R(红)、G(绿)、B(蓝):

色码十六进制十进制(0–255)
红(R)FF255
绿(G)5787
蓝(B)3351

因此 #FF5733 等同于 rgb(255, 87, 51)——一种偏橘红的颜色。

四、URL 编码中的十六进制

URL 只允许特定字符,不允许的字符(如空格、中文、特殊符号)必须用百分比编码(Percent Encoding)表示:将字符的 UTF-8 字节转为十六进制,前面加 %

原始字符URL 编码说明
空格%20十六进制 20 = 十进制 32(空格的 ASCII 码)
/%2F斜线在路径之外需编码
%E4%B8%ADUTF-8 编码为 3 个字节
@%40在某些 URL 部分需编码
立即试用:把含有中文或特殊符号的 URL 粘贴到URL 编码工具,即时查看每个字符对应的十六进制编码。

五、Base64:另一种常见的编码方式

Base64 并非进制,而是一种将二进制数据转为可打印文字的编码方式。它把每 3 个 byte(24 bits)分成 4 组 6-bit,每组对应 64 个字符之一(A–Z、a–z、0–9、+、/)。

原始(ASCII):Man
二进制:01001101 01100001 01101110
分组(6-bit):010011 010110 000101 101110
Base64:       T      W      F      u  → TWFu

Base64 输出比原始数据大约 33%(每 3 bytes 变 4 字符),但能安全地在只支持文字的管道(如 email、HTML 属性、JSON)中传输二进制数据。

立即编码:把任意文字或文件内容粘贴到Base64 编解码工具,即时看到编码结果与解码还原。

六、进制在编程中的实际应用

内存地址

调试工具和内存转储通常以十六进制显示地址,例如 0x7FFE1234。前缀 0x(C/C++/Python/JS)、#(CSS)或 0b(二进制)是编程语言标示进制的常见方式。

位掩码(Bitmask)

Unix 文件权限用八进制表示,如 chmod 755

7 = 111(二进制)= 读(4) + 写(2) + 执行(1)
5 = 101(二进制)= 读(4) + 执行(1)
5 = 101(二进制)= 读(4) + 执行(1)

哈希输出

MD5 输出 128 bits,以 32 个十六进制字符表示(每个字符 = 4 bits);SHA-256 输出 256 bits,以 64 个十六进制字符表示。

七、各语言中的进制表示

语言二进制八进制十六进制
Python0b10100o120xA
JavaScript0b10100o120xA
C / C++—(无原生语法)0120xA
Java0b10100120xA
CSS#FF5733

总结

进制不是艰深的理论,而是理解许多日常技术的钥匙:

  • 二进制是计算机底层的语言,位运算的基础
  • 十六进制是编程的通用语,颜色码、内存地址、哈希值都用它表示
  • Base64 建立在二进制之上,解决了二进制数据在文字环境中传输的问题
  • URL 编码用十六进制标记不允许的字符,让网址可以包含任意文字

理解这些基础后,你看到 %E4%B8%AD#FF5733TWFu 这些字符串,就能立刻读懂它们代表的意义。