进制转换器

在二进制、八进制、十进制、十六进制以及 2 到 36 之间的任意进制之间转换数字,超大数字也能精确转换。

十进制(基数 10)
十六进制(基数 16)
二进制(基数 2)
八进制(基数 8)
其他进制

如何在二进制、十进制和十六进制之间转换

  1. 在与你手上数字对应的输入框中输入:十进制、十六进制、二进制、八进制,或者先在其他进制的菜单中选择 3 到 36 之间的任意进制再输入(默认选中 36 进制)。
  2. 输入时,其他所有输入框会同步更新。无需选择转换方向,任何一个框都可以作为输入。
  3. 点击所需结果旁边的复制按钮。如果更喜欢 ff 而不是 FF,取消勾选大写字母。

输入框下方会显示这个数需要多少位,以及向上取整后的字节数,在确定字段大小时很有用。输入方式很宽松:在对应的框中可以带 0x、0b、0o 前缀,字母大小写均可,可以加负号,空格、下划线和逗号会被忽略,所以 1111 0000、0xDEAD_BEEF、1,000,000 都没问题。遇到无效字符时,提示信息会指出是哪个字符,例如二进制里的“2”。

位值记数法的原理

在任何进制 b 中,每一位的权重都是右边一位的 b 倍。十进制 255 表示 2×100 + 5×10 + 5×1。同样的数量用十六进制写是 FF,即 15×16 + 15×1。用二进制写是 11111111:八个 1,每一位的权重是前一位的两倍。大于 10 的进制借用字母表示多出来的数字,A = 10 一直到 Z = 35,这就是本工具最高只支持 36 进制的原因。

  • 二进制直接反映硬件存储数据的方式:每一位就是一个比特。
  • 八进制把比特三个一组。如今主要保留在 Unix 文件权限中。
  • 十六进制把比特四个一组,所以一个字节总是正好两位十六进制数。这使它成为书写内存地址、字节转储、哈希值和颜色值的标准方式。
  • 36 进制用上所有数字和字母,能生成简短且不区分大小写的 ID,常见于短网址和某些参考编码。

示例

十进制十六进制二进制八进制常见场景
255FF1111 1111377一个字节的最大值
2561001 0000 0000400需要 9 位,因此占 2 个字节
4931ED111 101 101755chmod 755:rwx r-x r-x
3735928559DEADBEEF32 位33653337357经典的调试标记值
16746496FF880024 位77704000颜色 #FF8800

权限的例子说明了八进制为什么适合 Unix:一位八进制数正好是三个比特——读、写、执行——依次对应所有者、所属组和其他用户。颜色的例子中,FF、88、00 三组分别是红、绿、蓝三个字节 255、136 和 0;取色器与颜色转换可以帮你完成这种拆分。

大数也能精确转换。本工具使用任意精度整数,所以 2⁶⁴ − 1 = 18446744073709551615 会毫无舍入地变成 FFFFFFFFFFFFFFFF(64 位,8 字节)。许多计算器和电子表格在超过 15~16 位有效数字后会悄悄丢失精度,而 Excel 的 DEC2BIN 只接受 −512 到 511 之间的数。

手工换算

十进制 → 二进制:反复除以 2,再把余数从最后一个往前写。以 156 为例:156→78 余 0,78→39 余 0,39→19 余 1,19→9 余 1,9→4 余 1,4→2 余 0,2→1 余 0,1→0 余 1,所以 156 = 10011100。同样的方法适用于任何进制;改为除以 16,就得到十六进制的 9C。

十六进制 → 十进制:从右往左以 0 开始给每一位编号,每位数字乘以 16 的相应次方后相加:2F = 2×16 + 15 = 47。

二进制 → 十六进制:从右往左每四位分成一组,逐组换算:1001 1100 → 9 和 C → 9C。换成八进制则每三位一组。

负数与补码

本工具用负号表示负数:−42 在十六进制中是 -2A,在二进制中是 -101010。计算机通常用另一种方式存储负数,即二进制补码,其位模式取决于字段的宽度。对于 n 位字段,先加上 2ⁿ 再换算即可:8 位时 256 − 42 = 214,即 D6 或 11010110;16 位时 65536 − 42 = 65494,即 FFD6。反过来,如果 n 位值的最高位是 1,减去 2ⁿ 就得到有符号的值:作为有符号字节的 FF 是 255 − 256 = −1。

常见问题

可以转换 0.5 这样的小数吗?

不可以,只支持整数,小数点会被提示为无效数字。很多十进制小数(如 0.1)根本无法用有限位二进制表示,这正是浮点数舍入误差的根源。

为什么代码里有 0x,结果里却没有?

0x、0b、0o 只是告诉编程语言后面跟的是哪种进制的记号,并不是数字本身的一部分。粘贴数值时,请按所用语言的要求加上前缀。

存储一个数需要多少位?

状态栏会直接显示。一般来说,n 位可以存放 0 到 2ⁿ − 1 的无符号值,所以 255 用 8 位就够,256 则需要 9 位。

36 进制里的“10”等于十进制的 10 吗?

不等于。在 36 进制中 10 表示 1×36,也就是十进制的 36,而 ZZ 是 35×36 + 35 = 1295。与人分享数字时,一定要注明是哪种进制。