我在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仍然有效。

或者这是错误的做法?

..弗雷德里克

有帮助吗?

解决方案

((n& item.c)== item.c)表示“如果item.c中设置的所有位也设置为n”,则为“true”。如果item.c为7且n为11,则在item.c中设置第4位,但在n中不设置,因此结果为false。

听起来你想要 if(n& item.c){...}

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top