进制转换完全指南
进制(基数)只是「用多少种不同的符号来表示一个数」。十进制用 0–9 十个符号, 二进制只用 0 和 1,八进制用 0–7,十六进制则用 0–9 加 A–F。 掌握进制互转,是理解计算机存储、网络协议和底层编程的基础。
一、四种常用进制的关系
因为 8、16 恰好是 2 的整数次幂(8 = 2³,16 = 2⁴),所以二进制与八 / 十六进制之间可以「按位直接替换」,这也是计算机偏爱 16 进制的原因:
- 二进制 → 八进制:从右往左每 3 位一组,每组换成 1 位八进制。
- 二进制 → 十六进制:从右往左每 4 位一组,每组换成 1 位十六进制。
- 十六进制 → 二进制:每位展开成 4 位二进制(不足补前导 0)。
| 十进制 | 二进制 | 八进制 | 十六进制 |
|---|---|---|---|
| 0 | 0000 | 0 | 0 |
| 10 | 1010 | 12 | A |
| 15 | 1111 | 17 | F |
| 255 | 11111111 | 377 | FF |
二、二进制与十进制互转
二进制 → 十进制:每位数字乘以 2 的「位权」(从右往左第 0、1、2… 位),再求和。例如 1010₂ = 1×2³ + 0×2² + 1×2¹ + 0×2⁰ = 8 + 0 + 2 + 0 = 10。
十进制 → 二进制(除 2 取余):把十进制数不断除以 2,记录每次的余数,直到商为 0;再把余数从下往上排列。例如 10 ÷2 余 0、5 ÷2 余 1、2 ÷2 余 0、1 ÷2 余 1 → 倒序得到 1010。
三、原码、反码、补码
计算机用固定位数(如 8 位、32 位)存放整数。要表示负数,需要一套编码规则:
- 原码:最高位当符号位(0 正 1 负),其余位表示数值大小。缺点是有
+0和−0两种零。 - 反码:正数的反码同原码;负数是把对应正数按位取反(0 变 1、1 变 0)。
- 补码:反码再加 1。现代计算机统一用补码表示有符号整数,因为加减法可以用同一套电路,且零只有一种表示。
例:8 位下 −5 的原码是 10000101、反码是 11111010、补码是 11111011。在上方「补码·有符号」标签里可以随时验证任意数值。
四、文本与字节:编码的另一面
文字在内存里也是一串二进制。UTF-8 把每个字符编码成 1–4 个字节,于是「Hello」对应 48 65 6C 6C 6F(十六进制)。用「文本编码」标签,你可以看到任意文字的十六进制、二进制、八进制与 Base64 形态,也能把一段编码还原成文字。
五、使用技巧
- 输入大数时可用空格或下划线分隔(如
FF_FF_FF),便于核对,工具会自动忽略。 - 勾选「分组显示」,二进制每 4 位、十六进制每 2 位一组,长数字一眼可读。
- 需要任意进制(如 7 进制、24 进制)时,用「进制互转」里的自定义目标进制即可。
- 「位编辑器」适合教学演示:一个格子一个比特,直观看到改动如何影响十进制与十六进制值。
六、常见问题
进制转换器支持哪些进制?
支持二进制(2)、八进制(8)、十进制(10)、十六进制(16)之间的互转,也可以指定任意 2–36 进制作为源或目标。计算基于 BigInt,可精确处理超大整数而不会发生浮点精度丢失。
为什么大整数不会因为位数过多而出错?
本工具的整数计算完全使用 JavaScript 引擎原生的 BigInt,不依赖任何第三方库,也不走浮点数(float64 超过 2^53 就会失真)。只要不超过浏览器内存,任意长度的整数都能精确换算。
什么是补码?为什么计算机用补码表示负数?
补码(two's complement)是计算机中表示有符号整数的标准方式:正数与原码相同,负数是将其绝对值按位取反再加 1(即 2^w − 绝对值,w 为位宽)。它让加法器无需区分正负、统一用同一套加法电路,且 0 只有一种表示。本工具可同时给出原码、反码与补码。
原码、反码、补码有什么区别?
原码(sign-magnitude)最高位为符号位、其余为幅度,存在 +0 和 −0 两种零;反码(ones' complement)是负数的各位取反;补码(two's complement)是反码再加 1,是当今计算机普遍采用的方案。三者仅在负数与零的编码上不同,正数三者一致。
文本编码功能怎么用?
在「文本编码」中,把文字转为 UTF-8 字节的十六进制、二进制、八进制、十进制及 Base64;反过来,粘贴一段 Hex、二进制或 Base64 也能解码回原文,方便查看字符的底层字节。