Javascript au niveau du bit
-
06-07-2019 - |
Question
J'ai un problème d'utilisation de bitwise en javascript. Je ne sais pas si je m'y prends mal. Mais voilà.
J'ai 4 catégories principales. Avec l'identifiant 1,2,4,8.
Un élément de mon objet a une propriété avec le total des catégories dont il est membre. c'est à dire.
{ item: { name: 'lorem', c: 7 }} //member of category 1,2,4
J'ai la variable (n) qui contient alors le nombre combiné de catégories actives. Dans ce cas, si toutes les catégories sont actives, le nombre est 15.
Maintenant, si je change n en 11 (la catégorie 1,2,8 est active), j'essaie de déterminer quels éléments sont actifs. Comme ça
for (x in items) {
item = items[x];
if ((n & item.c) == item.c) {
//active
} else {
//inactive
}
}
Cela ne fonctionne pas correctement. Par exemple, si item.c vaut 9 (membre de 1,8), l'instruction if retournera true. Comme il se doit. Mais si item.c vaut 7 (membre de 1,2,4), l'instruction if renvoie false. C'est mon problème. 7 devrait être vrai puisque les catégories 1 et 2 sont toujours actives.
Ou est-ce la mauvaise approche?
.. fredrik
La solution
(((n & item.c) == item.c)
signifie "true" si tous les bits définis dans item.c sont également définis dans n ". Si item.c vaut 7 et n vaut 11, le bit 4 est défini dans item.c mais pas dans n, le résultat est donc false.
On dirait que vous voulez if (n & amp; item.c) {...}