You need to enable JavaScript to run this app. 如何理解JavaScript中(sum & operand) === operand的位与运算逻辑?
优惠活动
大模型
产品
解决方案
定价
更多

如何理解JavaScript中(sum & operand) === operand的位与运算逻辑?

位运算判断包含逻辑原理解析

这个has函数的作用是判断sum的二进制表示中,是否覆盖了operand所有置为1的二进制位,通常用于标志位、权限位的判断场景。

核心规则铺垫

按位与(&)的运算规则非常简单:将两个数字转为二进制后逐位对比,只有两个数的对应二进制位都为1时,结果的对应位才为1,否则为0。

判断条件逻辑拆解

我们要理解(sum & operand) === operand的逻辑,只要抓住一个核心:如果要让按位与的结果等于operand,那么operand里所有值为1的二进制位,sum的对应位置必须也是1。
反过来想:如果operand有任意一个为1的位,sum对应的位置是0,那么按位与之后该位置的结果就是0,最终的运算结果一定小于operand,不可能和operand相等。

示例验证

就拿你给出的代码示例has(7, 4)来计算:

  • 十进制7转二进制为 0111
  • 十进制4转二进制为 0100
  • 两者按位与的计算过程:
0111(十进制7)
& 0100(十进制4)
--------
  0100(十进制4)

运算结果正好等于operand的值4,所以返回true,说明7包含4对应的标志位。

再举一个反例,比如调用has(3,4):

  • 十进制3转二进制为 0011
  • 和4的二进制0100按位与的结果是0000,不等于4,所以返回false,说明3不包含4对应的标志位。

如果operand是多个标志位的组合值,这个判断也可以用来验证sum是否同时拥有这些组合里的所有标志位。

常见使用场景

这种写法最常用在多标志位管理场景:我们会将每个独立的标志/权限定义为2的幂(1、2、4、8、16...,每个数对应唯一的一个二进制位),把多个标志相加得到总和sum,之后就能用这个方法快速判断是否包含某个指定标志。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 11:15:02