进制

对比计算

下载

包含本次计算的输入与结果,以及您对比过的所有附加计算。

在二进制、八进制、十进制和十六进制之间重写同一个值

数字进制(或”基数”)是指一个数字系统在进位到下一个位值之前所使用的不同数字符号的数量 — 十进制使用 10 个(0-9),二进制使用 2 个(0-1),八进制使用 8 个(0-7),十六进制使用 16 个(0-9,然后是 A-F)。输入这四种进制中任意一种的整数,此计算器将同时以全部四种进制显示相同的值。

二进制是计算机在内部表示每个值的方式(每个数字是一个”比特”);十六进制是编程中二进制的常见简写形式(每个十六进制数字恰好代表 4 个二进制数字,因此阅读和输入起来紧凑得多);八进制出现在较旧的 Unix 文件权限和一些底层场景中。十进制就是日常使用的十进制系统。

计算公式

每种位置数字系统的工作原理都相同:每个数字乘以基数的相应位值次幂,然后求和:

=i=0ndi×基数i\vA{\text{值}} = \sum_{i=0}^{n} d_i \times \vB{\text{基数}}^i

其中 did_i 是位置 ii 处的数字(从最右边的数字开始计为 0)。转换另一种进制则是反复用新进制去除十进制值,并记录每次的余数 — 这是上述求和过程的逆过程。

举例说明

将二进制 11111111 转换为其他三种进制:

  1. 从右到左读取,每个 1 贡献其位值:27+26+25+24+23+22+21+20=2552^7 + 2^6 + 2^5 + 2^4 + 2^3 + 2^2 + 2^1 + 2^0 = 255
  2. 十进制:255
  3. 八进制:反复用 8 除 255(255 ÷ 8 = 31 余 7,31 ÷ 8 = 3 余 7,3 ÷ 8 = 0 余 3), 从下到上读取余数得到 377
  4. 十六进制:255 ÷ 16 = 15 余 15,15 ÷ 16 = 0 余 15 — 两个余数都是 15(十六进制中的 F), 得到 FF

需要考虑的关键因素

  • 一个字节(8 位)恰好可以表示 256 个不同的值——十进制的 0 到 255,或十六进制的 00 到 FF。 这正是为什么 255/FF 在计算机领域是如此常见的参考值——它是单个字节能容纳的最大值,从 RGB 颜色通道(每通道 0-255)到网络和文件格式,随处可见。
  • 八进制在历史上比现在更常用,很大程度上是因为旧式计算机的字长。 八进制(以 8 为基数)能整齐地对应到每组 3 个二进制数字,适合字长为 3 的倍数的计算机——现代计算已在很大程度上转向十六进制(对应每组 4 位),因为大多数现代硬件的字长是 4 和 8 的倍数,不过八进制仍出现在一些特定场景中,例如 Unix 文件权限表示法(如 chmod 755)。
  • 一个常见的程序员错误是仅凭上下文就混淆了一个数字的进制。 数字”10”根据进制不同代表截然不同的值——十进制中是 10,二进制中是 2,八进制中是 8,十六进制中是 16——这正是为什么编程语言通常要求显式前缀(如十六进制的 0x 或二进制的 0b)来消除对所用进制的任何歧义。
  • 理论上任何整数都可以用任意进制表示,而不仅限于这四种。 二进制、八进制、十进制和十六进制只是在计算机和日常数学中最常用的四种进制——本计算器所使用的同一位置记数原理,可以推广到任意进制,比如三进制、二十进制,或六十进制(时间和角度传统上按此划分的基础)。

常见错误

  • 在没有前缀的情况下,默认将混合进制的数字当作十进制读取。 “10” 在十进制中表示十,但在二进制中只表示二——在对某个数字进行运算之前,务必先检查(或注明)它是用哪种进制书写的。
  • 假设前导零会改变数值。 就像十进制一样,二进制中的 001111 的值相同——前导零只在固定宽度格式(例如显示完整一个字节)时才有意义,并不改变数字本身的实际值。
  • 忘记大于 9 的十六进制数字使用字母而非两位数字。 十六进制的十写作 A,而不是 10——在十六进制中写 10 实际上表示十进制的十六,这是造成严重误差的常见根源。
  • 试图直接转换负数。 正如上面的常见问题所述,负的二进制/十六进制值取决于所选定的位宽和补码约定——不像非负整数那样存在唯一明确的转换方式。

实用信息

  • 正在处理网络地址而不是任意数字吗?IP子网计算器 将同样的二进制/十进制关系专门应用于 IPv4 地址。
  • 需要以紧凑形式表示非常大或非常小的十进制数吗?科学记数法计算器 专门处理这类转换。
  • 对一种历史悠久、与位置记数相关的数字系统感到好奇吗?罗马数字计算器 可以与罗马数字互相转换,后者使用一种完全不同(非位置制)的方法。

来源: 标准位置数字系统转换.

常见问题

什么是数字进制(基数)?

数字进制是指一个数字系统在进位到下一个位值之前所使用的不同数字符号的数量。十进制(10 进制)使用数字 0-9;二进制(2 进制)只使用 0 和 1;八进制(8 进制)使用 0-7;十六进制(16 进制)使用 0-9,然后用字母 A-F 表示 10-15。

为什么计算机使用二进制?

计算机硬件由只能完全开或完全关的开关构成,这自然对应于二进制的两个数字(1 和 0)。计算机存储或处理的每一个值最终都以二进制表示,尽管程序员通常使用更易于人类阅读的进制,如十进制或十六进制。

为什么编程中使用十六进制而不是二进制?

每个十六进制数字恰好代表 4 个二进制数字(比特),因此十六进制数的长度大约是等值二进制数的四分之一,同时表示完全相同的值 -- 比一长串 1 和 0 更容易被人阅读、输入和比较。

此计算器能处理负数吗?

不能 -- 在二进制或十六进制中表示负数需要选定一个固定的位宽和一种二补数约定,这因场景而异(8 位、16 位、32 位等)。此计算器的范围限定于非负整数,在这个范围内转换是明确无歧义的。

确认您的年龄

为了创建账户,请告诉我们您的出生月份和年份。