Pregunta

Ok, realmente no entiendo cómo funciona este bucle, es la declaración lógica la que más me molesta. Los permisos son un valor constante que he asignado 127. roles.java contiene valores constantes que determinan qué roles pueden acceder a ciertas páginas de un sitio web. El problema es que la instrucción lógica devuelve verdadero cuando Bitmask es igual a uno. ¿Cómo es esto posible?

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
        }
      }
¿Fue útil?

Solución

El equivalente binario de cada uno de estos números

127 ==  1111111
1   ==        1

El y el operador devolverían bits que se establecen en ambos permission Y bitMask. Entonces el Resuidio es

              1

cual es != 0

Es posible que permissions debiera ser 128, porque

128 == 10000000

Lo que daría como resultado el cero que estás esperando.

Otros consejos

127 == 1111111, 1 == 0000001

127 & 1 == 1

Qed.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top