toolfree

进位转换

在浏览器里做进位转换,采用任意精度运算,所以 64 比特的数值是精确的,不会被悄悄四舍五入。

在你的浏览器中运行

请输入一个数字。

大多数转换器在 2^53 以上都是错的,而且不声不响

这就是这一页存在的理由,值得了解,因为那个错误是看不出来的。

JavaScript 的数字是 64 比特浮点数,能精确表示的整数只到 9,007,199,254,740,991——也就是 2^53 − 1。超过之后,parseInttoString(radix) 还是会回给你一个答案,只是低位数字是错的。

0xFFFFFFFFFFFFFFFF 应该是 18446744073709551615。用一般数字做的转换器会回 18446744073709552000

而那正是开发者手上会有的输入:64 比特杂凑值、Twitter 或 Discord 的 snowflake ID、暂存器 内容、文件位移量。这里全部使用 BigInt,所以不管多大都是精确的。

前缀与分隔符号都吃

手上是什么就贴什么。0xDEAD_BEEF0b1010 10100o7551,234,567 都可以——前缀 会在符合你选的基数时被去掉,底线、空白和逗号一律忽略。

不属于该基数的数字会被指名拒绝,而不是跳过。把 1g 里的 g 默默丢掉然后回报 1, 正是一个转换器对打错的字给出自信错误答案的方式。

二补数,以及「有号字节」的问题

0xFF 当成有号字节是多少?」是一个真实的问题,而只会处理数值大小的转换器答不出来。

同样的比特,在不同宽度、以及有号与无号之下,代表不同的数。0xFF 无号是 255,当成 8 比特 有号数则是 −10xFFFF 是 65535 还是 −1,取决于你是不是以 16 比特在读它。

每一种宽度只有在数值放得进去时才会显示。如果一个数字装不进一个字节,就不会给你 8 比特 的读法,因为根本没有。

16 以上的基数

2 到 36 的任何基数都可以,用 0-9 接着 a-z。基数 36 是人类还打得出来的最密集形式,这 也是短 ID 和短网址服务常用它的原因。

没有任何上传

在这个页面里转换。