MiServe DevTools

我的贴纸

把工具固定在这里,会保存在此浏览器中。

进制转换器

在二进制、八进制、十进制、十六进制以及 2 到 36 的任意进制之间转换任意大小的整数,并给出其补码形式。

绝对值的位长度
作为有符号整数所需的位数(补码)
作为定宽整数(补码)
位宽十六进制二进制按有符号读取按无符号读取
8 位
16 位
32 位
64 位

在浏览器中运行。粘贴的内容不会被上传。

关于此工具

同一个数,不同的进制

进制(又称基数,radix)是一种位置记数法所使用的不同数字的个数。十进制有十个,二进制有两个,八进制有八个,十六进制有十六个,借用 a 到 f 表示十到十五。更高的进制(最高 36)沿字母表一直延续到 z。

硬件以二进制存储数字。十六进制是它的紧凑写法,因为一位十六进制数字正好是 4 个比特,两位正好是一个字节。八进制至今仍用于 Unix 文件权限,其中每一位数字对应 3 个比特。

此页面上的每个字段都显示同一个整数。编辑其中任意一个,其余字段都会随之更新。

可以输入什么

数字之间可以用空格或下划线分隔,例如 1111_0000 或 1 000 000,数字前也可以带负号。只要前缀中的字母本身不是该字段的数字,0b、0o 和 0x 前缀就会分别选择二进制、八进制和十六进制:在十进制字段中输入 0xff 会读作 255,而在十六进制字段中输入 0b1 则是十六进制数 B1。

转换使用 JavaScript 的 BigInt,这是一种任意精度的整数类型,因此不会有任何舍入。唯一的大小限制来自浏览器 JavaScript 引擎对 BigInt 的限制,超出限制的数会在其字段中提示。大于 9,007,199,254,740,991 的数(普通 JavaScript 数字从这里开始丢失精度)也能精确转换。仅支持整数,不支持小数。

负数与补码

各字段把负数显示为负号加上它的绝对值。计算机的存储方式则不同:在补码中,负值存储为该值加上 2 的位宽次幂。8 位时这个幂是 256,所以 -1 存储为 255,即 ff;-128 存储为 128,即 80。

只要值能容纳,表格就会显示它在 8、16、32 和 64 位下的位模式,以及这个位模式分别按有符号整数和无符号整数读回时表示的值。这就是 255 和 -1 在 8 位下共用同一个位模式 ff 的原因。

常见问题

如何手动把二进制转换为十进制?

每一位二进制数字代表 2 的一个幂,从最右边的 1 开始。把数字为 1 的那些位对应的幂相加:1011 是 8 + 2 + 1,即 11。

为什么编程中经常使用十六进制?

一位十六进制数字正好表示 4 个比特,所以一个字节总是两位十六进制数字。这让内存转储、颜色、哈希和位掩码比二进制短得多,又能轻松对应回比特。

这个转换器能处理多大的数?

工具本身不设限制。它使用任意精度整数,因此几千位的数也能精确转换。很长的输入需要更长的计算时间,而且每种浏览器的 JavaScript 引擎对单个整数都有大小上限,超过上限的数会在其字段中提示。

什么是补码?

补码是几乎所有计算机存储有符号整数的方式。最高位带有负权重,因此 8 位值的范围是 -128 到 127,而 -1 存储为 8 个 1。

编码分类的其他工具