我在javascript中使用bitwise时遇到问题。我不知道我是否会采取错误的方式。但是这里有。
我有4个主要类别。 id为1,2,4,8。
我的对象中的项目具有一个属性,该属性包含其所属类别的总和。即。
{ item: { name: 'lorem', c: 7 }} //member of category 1,2,4
我有变量(n),然后保持活跃类别的组合数量。在这种情况下,如果所有类别都处于活动状态,则该数字为15。
现在,如果我将n更改为11(类别1,2,8处于活动状态),我正在尝试确定哪些项目处于活动状态。喜欢这个
for (x in items) {
item = items[x];
if ((n & item.c) == item.c) {
//active
} else {
//inactive
}
}
这不能正常工作。例如,如果item.c是9(成员为1,8),则if语句将返回true。正如它应该。但是如果item.c是7(1,2,4的成员),则if语句返回false。这是我的问题。 7应该返回true,因为类别1和2仍然有效。
或者这是错误的做法?
..弗雷德里克
答案 0 :(得分:3)
((n & item.c) == item.c)
表示“如果在item.c中设置的所有位也设置为n”,则为“”。如果item.c为7且n为11,则在item.c中设置第4位,但在n中不设置,因此结果为false。
听起来你想要if (n & item.c) { ... }