ToolBench

转换

进制转换

按任意进制输入,同时看到另外三种。内部走大整数运算,所以 64 位标识符能精确转换,而不是变成 9.2e18 这种科学计数。

怎么用

  1. 在输入框里输入数字。
  2. 选择它本身的进制。
  3. 下方同时显示二进制、八进制、十进制、十六进制。
  4. 0x、0b 这类前缀会自动识别并去掉。

十六进制为什么夹在人和机器之间

硬件看到的是二进制,但把 32 位写成零和一既难读又容易错。十六进制之所以好用,是因为 16 是 2 的幂:每一位十六进制恰好对应四位,一个字节永远是两个字符,换算不需要做算术。正是这个对齐关系,让十六进制在内存地址、颜色代码和字节转储上赢过了十进制。

负数与补码

计算机里不存负号,负整数用补码表示:所有位取反再加一。这样减法和加法共用同一套电路,所以成了通用做法。对进制转换的影响是:0xFFFFFFFF 按无符号 32 位是 4294967295,按有符号是 -1——位完全一样,解释不同。

用十六进制读位掩码

权限、功能开关和状态码常写成十六进制,因为每一位十六进制正好对应四位二进制。0x1F 就是 0001 1111:五个标志置位,三个清零。从十进制 31 里根本读不出这个信息,从十六进制里一眼就有。这就是这个写法在底层代码里活到今天的原因。

数值超过 253 时,JavaScript 在任何转换发生之前就已经丢精度了,所以 64 位的标志位集合无法往返。这类值要按字符串处理,或者用支持任意精度整数的工具。

常见问题

为什么不用 parseInt?

JavaScript 的数字是双精度浮点,超过 2^53 就丢精度。这里用 BigInt 转换,像 18446744073709551615 这样的 64 位值也能精确输出。

接受哪些字符?

取决于所选进制:0-1、0-7、0-9 或 0-9a-f。超出范围的字符会被明确指出,而不是悄悄返回 NaN。

支持负数吗?

暂不支持,输入按无符号处理。做补码运算时,请先转换绝对值再自行处理符号。

能粘贴十六进制颜色吗?

可以。进制选 16,粘贴六位数字(不带 #),十进制结果就是该颜色的整数值。

为什么十九位数字转换后不对?

它超过了 253,也就是 JavaScript 能精确表示的最大整数。这类值要按字符串处理,或者用支持 64 位整数的运行环境。

0x、0b、0o 前缀是什么意思?

分别是十六进制、二进制和八进制。很多解析器认这些前缀,但 JSON 不认——把数字放进 JSON 之前要去掉前缀。