进制转换(二进制、八进制、十进制、十六进制)

在二进制、八进制、十进制、十六进制之间相互转换数值。使用 BigInt 进行运算,即使位数很大的整数也能精确转换,不会产生误差。

进制转换工具是什么?理解二进制、八进制、十进制、十六进制的关系

进制转换工具只需输入二进制、八进制、十进制、十六进制中任意一种表示的数值,就能一次性显示其余三种进制的对应表示。在编程、网络设置、电子电路等场景中,经常需要用不同进制处理同一个数值,而手动换算随着位数增加很容易出错。本工具会先校验输入内容,然后立即显示转换结果,无需借助计算器应用或纸质换算表。

进制转换的原理其实很简单:任何进制都是用"位权 × 各位数字"之和来表示同一个数值。十进制的 255,用二进制写作 11111111,八进制写作 377,十六进制写作 FF,写法虽然不同,但所表示的数量完全相同。本工具在计算时使用 BigInt(位数不受限制的整数类型)而非 JavaScript 的 Number 类型,因此即便是超过 2 的 53 次方的超大整数,也能精确转换、不产生误差。

进制转换工具的使用方法

  1. 选择输入数值的进制 从下拉菜单中选择接下来要输入的数值是用二进制、八进制、十进制还是十六进制书写的。
  2. 输入数值 只输入所选进制允许使用的字符。十六进制还可以使用 A 到 F 的字母。
  3. 检查是否包含非法字符 如果输入内容中包含所选进制不允许的字符,将显示错误提示,请据此修改输入内容。
  4. 查看各进制的转换结果 无需任何按钮操作,二进制、八进制、十进制、十六进制的表示会自动全部列出。
  5. 继续转换其他数值 更改输入框中的数值或进制后,结果会立即重新计算,可以连续查看多个数值。

用好本工具的小技巧

  • 输入十六进制数值时,请不要添加 `0x` 等前缀,只需输入数字部分(例如:`FF`)。大小写字母均可识别。
  • 本工具使用 BigInt 进行计算,因此即使是超过 2^53 的大整数(在 JavaScript 的 Number 类型下会产生误差)也能精确转换。
  • 可用于编程中常见的十六进制颜色代码(例如:`#FF0000`),或在确认位运算结果时使用二进制表示法。
  • 八进制常用于类 Unix 系统的文件权限表示(例如:`755`)。将其与十进制、二进制对照查看,能更容易理解权限的含义。

进制转换工具的使用场景

编程学习与练习题检算

在完成信息科学课程或资格考试中出现的进制转换练习题后,可以立即验证自己的计算结果是否正确。

确认位掩码与颜色代码

将设计工具或 CSS 中使用的十六进制颜色代码(例如 `#FF0000`)转换为二进制表示,确认位运算标志中哪些位被置位。

网络地址、子网计算的前期准备

将 IP 地址或子网掩码转换为二进制表示,作为确认网络部分与主机部分边界的前期准备工作。

确认 Unix 文件权限

将 `chmod 755` 这类八进制权限值转换为二进制,直观地了解读取、写入、执行权限的组合方式。

处理大整数系统的调试

当日志或内存转储中以十六进制显示 64 位整数等较大数值时,可无误差地转换为十进制,直观把握实际数量。

进制转换相关术语表

二进制(Binary)
仅用 0 和 1 两种数字表示数值的记数法。计算机内部通常用电压高低或开关的开/关来对应这两种状态。
八进制(Octal)
使用 0~7 共 8 种数字表示数值的记数法。由于恰好对应二进制的 3 位,早期计算机及类 Unix 系统的文件权限中常见其身影。
十进制(Decimal)
使用 0~9 共 10 种数字,是我们日常生活中使用的记数法。本工具中十进制既可作为输入进制,也可作为转换后的输出之一。
十六进制(Hexadecimal)
使用 0~9 和 A~F 共 16 种字符表示数值的记数法。由于恰好对应二进制的 4 位,常用于以人类易读的形式表示内存地址、颜色代码等计算机内部数值。
基数(Radix)
某种记数法中一位数字所能表示的数字种类数量。二进制的基数为 2,八进制为 8,十进制为 10,十六进制为 16。
BigInt
JavaScript 中一种位数不受限制、可精确处理整数的数据类型。普通的 Number 类型在超过 2 的 53 次方时会产生误差,而 BigInt 无论位数多大都能精确转换。
位权
数值某一位对整体数值所贡献的大小。例如十进制的百位权重为 100,进制转换正是通过将各位数字乘以其位权后求和来实现的。
位掩码
用于提取或修改特定位的二进制模式。将十六进制值或颜色代码转换为二进制表示后,能更容易看出哪些位被置位。

常见问题

它们都是表示数值时使用的不同"进制"(基数)。十进制使用 0~9 共 10 个数字,是我们日常最熟悉的表示法;二进制只使用 0 和 1 两种数字,是计算机内部处理所使用的表示法;八进制使用 0~7;十六进制使用 0~9 和 A~F,在计算机科学和电子工程领域被广泛使用。

十六进制的一位数恰好可以表示 4 个比特(相当于二进制的 4 位),因此能够以人类更容易阅读的方式压缩表示二进制数据。它被广泛用于内存地址、颜色代码(`#RRGGBB`)、字符编码等需要处理计算机内部位序列的场合。

使用普通计算器或 JavaScript 的 Number 类型进行转换时,超过 2 的 53 次方(约 900 万亿)的整数可能会产生误差。本工具使用 BigInt(位数无限制的整数类型)进行计算,因此无论整数位数多大,都能精确转换,不会产生误差。

八进制主要用于类 Unix 系统(Linux、macOS 等)的文件权限表示(例如:`chmod 755`)。每一位数字代表"读取(4)、写入(2)、执行(1)"权限的组合,一位八进制数字就能简洁地表示所有者、所属组、其他用户各自的权限。
工具君

闲话 ― 为什么计算机采用二进制运行

计算机之所以以二进制(0 和 1)为基础,是因为电子电路更容易稳定地区分"电压高/低"或"开关开/关"这两种状态。相比之下,若要像十进制那样精确识别十个不同的电压等级,电路会更容易受噪声干扰、结构也更复杂。出于这种实用的工程考量,现代几乎所有计算机都采用了二进制。

十六进制之所以在编程中备受青睐,源于一个数学上的巧合:二进制的 4 位(0000~1111)恰好对应十六进制的 1 位(0~F)。例如,1 字节(8 比特)的数据用十六进制恰好可以表示为 2 位(`00`~`FF`),把原本需要 8 位二进制才能表达的信息压缩成了更易读的长度。

八进制的流行有其历史原因:早期计算机(如 20 世纪 60 年代的 PDP-8)采用了 12 位、36 位等 3 的倍数的字长,当时八进制与二进制的对应关系更为方便。此后,随着计算机逐渐统一采用 8 位、16 位、32 位(4 的倍数)等字长,十六进制在实用性上超过了八进制,如今已成为主流。不过,在 Unix 文件权限等场合,八进制至今仍在使用。