mikaio.dev/freetools

数基转换器

输入任何数字并选择其基数即可立即以二进制、八进制、十进制和十六进制形式查看它。

任意进制之间即时互转

进制转换器让你输入任意二进制(二进制)、八进制(八进制)、十进制(十进制)或十六进制(十六进制)的数字,立刻看到它在其余三种进制下的对应表示。不用记转换公式,也不用心算,只需选好源进制、输入数字,剩下的实时计算工具都替你完成。

为什么会有不同的进制

人类习惯用十进制计数,因为我们有十根手指。但计算机没有手指——它靠的是通、断两种电信号状态,这自然催生了二进制。其他进制则是二进制的实用简写:八进制把三位二进制数字打包成一组,十六进制把四位打包成一组,这让又长又难读的二进制字符串对工程师来说变得容易读写得多。

二进制——逢二进一

二进制是数字计算的根基。计算机里存储的每一个值、处理器执行的每一条指令、屏幕上的每一个像素,最终都会归结成一串0和1。一个二进制位叫做一个比特,八个比特组成一个字节。因为二进制数字很快就会变得很长——十进制的255需要八位二进制数字(11111111)才能表示——程序员很少直接写原始二进制,而是更喜欢紧凑得多的十六进制。

理解二进制对计算机科学专业的学生、软件工程师以及任何接触底层硬件的人来说都至关重要。位运算——比如AND、OR、XOR和NOT这类操作——在系统编程、密码学和图形处理中都是常见技巧。

八进制——逢八进一

八进制只用0到7这八个数字。一个八进制数字恰好对应三位二进制数字,所以三位一组的比特能干净地映射成一个八进制数字。这在大型机和小型机的年代非常方便,因为内存常常就是按三位一组来组织的。

如今,八进制最常见的用途是在Unix和Linux的文件权限代码里。执行chmod 755时,你用的就是八进制表示法:7(rwx)、5(r-x)、5(r-x),每个数字用三个比特分别编码所有者、群组和其他用户的读、写、执行权限。任何接触Linux系统的运维或开发人员几乎每天都会遇到八进制权限。

十进制——逢十进一

十进制是几乎所有人类文化通用的日常数字系统,使用0到9这十个数字。十进制数字每一位代表10的某次幂:个位、十位、百位、千位,以此类推。面向人的应用场景默认都用十进制——银行余额、温度、距离、时间戳,显示出来的都是十进制。

但在计算机内部,十进制运算相对"昂贵"。处理器天生擅长二进制运算,所以要表示十进制数字,需要用到诸如二进制编码十进制(BCD)之类的编码方案或转换算法。正因如此,大多数内部计算都用二进制完成,只有最终展示给用户看的结果才会转换成十进制。

十六进制——逢十六进一

十六进制在0到9之外,又用字母A到F表示10到15,把数字符号扩展到了16个。一个十六进制数字恰好对应四位二进制数字(称为一个"半字节")。这让十六进制成为二进制数据极为紧凑的表示方式:8位二进制的11111111,写成十六进制就只是FF。

十六进制在计算机和电子领域无处不在。调试器里的内存地址、网页设计中的颜色代码(#FF6347就是番茄红)、MAC地址、SHA哈希值以及字节码清单,都用十六进制表示。如果你看过文件的十六进制转储,或者查看过网络数据包的内容,就已经直接接触过十六进制了。

进制转换是怎么算的

把任意进制的数转换成十进制很直接:把每一位数字乘以该进制的相应次幂(从右往左数,从第0位开始),然后把所有结果加起来。

举例来说,二进制数1011转换成十进制:

1×2³ + 0×2² + 1×2¹ + 1×2⁰ = 8 + 0 + 2 + 1 = 11

把十进制转换成其他进制,需要反复做除法:用这个数除以目标进制,把余数记作下一位数字(从右往左排列),再用商继续除,直到商变成0为止。

举例来说,把11转换成二进制:11 ÷ 2 = 5余1,5 ÷ 2 = 2余1,2 ÷ 2 = 1余0,1 ÷ 2 = 0余1。把余数从下往上读出来,就是1011。

实际应用场景

颜色代码:网页设计和平面设计都依赖十六进制颜色代码。每一个CSS颜色值,比如#3A86FF,都是三对十六进制数字,分别编码红、绿、蓝三个通道,每个通道的取值范围是00(0)到FF(255)。

网络地址:MAC地址和IPv6地址都用十六进制书写。像2001:0db8:85a3::8a2e:0370:7334这样的IPv6地址,用一种(虽然依然复杂但)相对易读的格式压缩了128个比特的信息。

调试:在单步调试汇编代码或查看内存内容时,地址和原始数据值通常都以十六进制显示。能快速在十六进制和十进制之间换算——或者一眼看出0xFF等于255——是从事底层开发的一项基本功。

权限管理:Linux和macOS的文件系统权限使用八进制表示。理解644的含义——所有者可读可写(4+2=6),群组和其他用户只能读(4)——对服务器管理来说是必备知识。

心算小技巧

多练几次,一些常见的转换关系会变得很自然:

一个实用的捷径是:把二进制数从右往左每4位分成一组,再把每一组分别转换成对应的十六进制数字。比如11111100,拆成1111和1100,分别对应F和C,合起来就是十六进制的FC。

私密且即时

所有计算都完全在你的浏览器里完成,不会有任何数据被发送到服务器。转换过程在本地通过JavaScript内置的parseInt和toString方法完成,对JavaScript安全整数范围内(最高到2^53−1)的整数都十分可靠。

数基转换器常见问题解答

什么是二进制(基数为 2)?
二进制仅使用数字 0 和 1。每个位置代表 2 的幂。它是计算机的基本语言,因为晶体管有两种状态:开 (1) 和关 (0)。例如,二进制的 1010 等于十进制的 10。
什么是十六进制(基数为 16)?
十六进制使用数字 0–9 和字母 A–F(代表 10–15)。一个十六进制数字正好代表 4 个二进制数字(位),使十六进制成为一种紧凑的二进制写入方式。例如,十六进制的 FF 等于十进制的 255。
什么是八进制(基数为 8)?
八进制使用数字 0–7。一个八进制数字正好代表 3 个二进制数字。八进制在早期计算系统中广泛使用,并且仍在 Unix/Linux 文件权限中使用(例如 chmod 755)。