You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中如何正确实现64位整数的按位异或(XOR)运算

JavaScript实现64位整数按位异或(XOR)运算

JavaScript执行位运算时,默认会将所有双精度浮点数转换为有符号32位整数,无法直接对64位整数做位操作。你参考已有的64位按位与函数改写的异或函数运行异常,是两处逻辑写错了:

  • 提取数值低32位段的逻辑错误:原按位与函数中,是通过v & 0x7fffffff取出数值的低31位,和拆分出的高32位段对应拼接。你写的异或函数里,把这里的按位与&写成了按位异或^,相当于直接拿原数和掩码做异或,根本没有正确取出低位段的值。
  • 最终结果拼接逻辑错误:原按位与函数是把计算完的高32位段结果乘以0x80000000,加上计算完的低32位段结果得到最终值,你写成了高段值减去低段值,拼接逻辑完全错误。

修正后的可正常运行的64位异或函数代码如下:

function xor(v1, v2) {
    var hi = 0x80000000;
    var low = 0x7fffffff;
    var hi1 = ~~(v1 / hi);
    var hi2 = ~~(v2 / hi);
    var low1 = v1 & low;
    var low2 = v2 & low;
    var h = hi1 ^ hi2;
    var l = low1 ^ low2;
    return h * hi + l;
}

补充说明:这个实现仅支持在双精度浮点数可精确表示的整数范围内(即绝对值小于2^53)的64位整数运算,如果需要处理超出这个范围的64位整数,建议使用原生BigInt类型做位运算,写法更简单也不会有精度问题,直接写BigInt(v1) ^ BigInt(v2)即可得到正确结果。

内容的提问来源于stack exchange,提问作者José A Pérez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 22:06:11