首先是一些背景:
我们知道JavaScript数字是64位值,但并非所有64位都可用于表示整数。因此JavaScript不能代表所有2^64
个数字。
但它可以represent all the 2^52
整数。
所以简单的问题是:是否绝对不可能进行64位二进制到十进制转换?或者有一些黑客攻击。
此外,这有点令人困惑,因为我不明白发生了什么......
>>> str_64_1s = '1111111111111111111111111111111111111111111111111111111111111111'; >>> d = parseInt(str_64_1s, 2) 18446744073709552000 >>> d.toString(2) "10000000000000000000000000000000000000000000000000000000000000000" // 1 one + 64 zeros >>> parseInt(d.toString(2), 2) 18446744073709552000 >>> parseInt(d.toString(2), 2) === d true Math.pow(2, 64) == d true
一些相关的讨论: