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

如何正确检测大整数中是否已设置指定flags位标志

问题原因

  1. JavaScript 常规 Number 类型是双精度64位浮点数,可精确表示的整数范围仅为 -2^53 + 1 ~ 2^53 - 1,你使用的12261800583900083122远超该范围,直接赋值为Number类型时就已经出现精度丢失,数值本身不准确。
  2. 原生位运算符会自动将操作数转为32位有符号整数计算,超出32位的部分会直接截断,天然不支持大整数的位检测场景。

解决方案

使用ES2020新增的BigInt类型处理大整数值,所有涉及位运算的数值统一转为BigInt类型即可,修改后代码如下:

var flags = {
    Horde: 32n, 
    Allianz: 64n,
}
// 大整数后加n后缀声明为BigInt类型,也可以用BigInt('12261800583900083122')转换
var flag = 12261800583900083122n;

if ((flag & flags.Horde) === flags.Horde && (flag & flags.Allianz) === flags.Allianz) {
     console.log('Both');
} else if ((flag & flags.Allianz) === flags.Allianz) {
     console.log('Allianz');
} else if ((flag & flags.Horde) === flags.Horde) {
     console.log('Horde');
} else {
     console.log('Nothing');
}

注意事项

  • BigInt 类型不能直接和普通Number类型混合运算,相关数值需要统一转为BigInt类型
  • 比较时建议使用严格相等运算符===,避免隐式类型转换带来的异常问题

内容的提问来源于stack exchange,提问作者Berstos

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 10:57:03