如何在二进制、十进制和十六进制之间转换
- 在与你手上数字对应的输入框中输入:十进制、十六进制、二进制、八进制,或者先在其他进制的菜单中选择 3 到 36 之间的任意进制再输入(默认选中 36 进制)。
- 输入时,其他所有输入框会同步更新。无需选择转换方向,任何一个框都可以作为输入。
- 点击所需结果旁边的复制按钮。如果更喜欢
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,常见于短网址和某些参考编码。
示例
| 十进制 | 十六进制 | 二进制 | 八进制 | 常见场景 |
|---|---|---|---|---|
| 255 | FF | 1111 1111 | 377 | 一个字节的最大值 |
| 256 | 100 | 1 0000 0000 | 400 | 需要 9 位,因此占 2 个字节 |
| 493 | 1ED | 111 101 101 | 755 | chmod 755:rwx r-x r-x |
| 3735928559 | DEADBEEF | 32 位 | 33653337357 | 经典的调试标记值 |
| 16746496 | FF8800 | 24 位 | 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。与人分享数字时,一定要注明是哪种进制。