问题描述
以下代码检查 sum
是否有 operand
,代码非常简单,但我对条件 (sum & operand) === operand
感到困惑。
我读过 Bitwise AND (&) 文档,更让我困惑,有人能用简单的术语解释一下吗?
const has = (sum,operand) => (sum & operand) === operand
console.log(has(7,4))
解决方法
这种代码通常在您使用 bitflags 时使用。本质上,您想检查 operand 位是否也在 sum 中设置。
7 的二进制表示是 00000111
,而 4 的二进制表示是 00000100
。
通过执行按位 AND 运算 A & B
,您“保留”了两者之间的相同位,同时将所有其他位设置为 0。再次将结果与 B
进行比较可以让您了解如果全部B
中设置的位也在 A
中设置。