Question

Ok je ne comprends pas vraiment comment fonctionne cette boucle, son compte de la logique qui me le plus de bugs. autorisations est une valeur constante que j'ai assigné 127. Roles.java contient des valeurs constantes qui déterminent quels rôles peuvent accéder à certaines pages d'un site Web. Le problème est l'instruction logique retourne vrai quand bitmask est égal à un. Comment est-ce possible?

for (int bitMask = 1; bitMask <= 0x8000; bitMask *= 2)
    {
      boolean hasBit = (permissions & bitMask) != 0;
      if (hasBit)
      {
        String role = Roles.getRole(bitMask);
        if (role != null)
        {
          //Do stuff
        }
        else
        {
          //No role assigned
        }
      }
Était-ce utile?

La solution

L'équivalent binaire de chacun de ces nombres

127 ==  1111111
1   ==        1

L'opérateur retournerait bits qui sont définis dans les deux permission ET bitMask. Ainsi, le resuilt est

              1

qui est != 0

Il est possible que permissions devrait être 128, parce que

128 == 10000000

Ce qui donnera le zéro que vous attendez.

Autres conseils

127 == 1.111.111, 0.000.001 == 1

127 et 1 == 1

QED.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top