我正在寻找一种在 JavaScript 中对 64 位整数执行按位与运算的方法。
JavaScript 会将其所有双精度值转换为带符号的 32 位整数以执行按位运算( 此处有详细信息)。
原文由 Toby Hede 发布,翻译遵循 CC BY-SA 4.0 许可协议
我正在寻找一种在 JavaScript 中对 64 位整数执行按位与运算的方法。
JavaScript 会将其所有双精度值转换为带符号的 32 位整数以执行按位运算( 此处有详细信息)。
原文由 Toby Hede 发布,翻译遵循 CC BY-SA 4.0 许可协议
13 回答13.1k 阅读
7 回答2.2k 阅读
3 回答1.4k 阅读✓ 已解决
6 回答1.4k 阅读✓ 已解决
2 回答1.5k 阅读✓ 已解决
3 回答1.5k 阅读✓ 已解决
4 回答2.3k 阅读✓ 已解决
Javascript 将所有数字表示为 64 位 双精度 IEEE 754 浮点数(请参阅 ECMAscript 规范,第 8.5 节。)所有高达 2^53 的正整数都可以精确编码。较大的整数会削减其最低有效位。这就留下了一个问题,即如何在 Javascript 中表示 64 位整数——本机数字数据类型显然不能精确地表示 64 位 int。
以下说明了这一点。尽管 javascript 似乎 能够解析表示 64 位数字的十六进制数字,但底层数字表示并不支持 64 位。在浏览器中尝试以下操作:
在 Firefox、Chrome 和 IE 中,我得到以下信息。如果数字以其完整的 64 位荣耀存储,则所有减法的结果应该为 1。相反,您可以看到 2^53+1 和 2^53 之间的差异是如何丢失的。
所以,你可以做什么?
如果您选择将一个 64 位整数表示为两个 32 位数字,那么应用按位 AND 就像将 2 个按位 AND 应用于低位和高位 32 位“字”一样简单。
例如:
让你: