Domanda

Ok non capisco davvero come funziona questo ciclo, è l'affermazione logica che mi infastidisce di più. Le autorizzazioni sono un valore costante che ho assegnato 127. Ruoli.java contiene valori costanti che determinano quali ruoli possono accedere a determinate pagine di un sito Web. Il problema è che l'istruzione logica restituisce vera quando BitMask è uguale a uno. Com'è possibile?

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
        }
      }
È stato utile?

Soluzione

L'equivalente binario di ciascuno di questi numeri

127 ==  1111111
1   ==        1

L'operatore e l'operatore restituirebbero bit impostati in entrambi permission E bitMask. Quindi il resuit è

              1

che è != 0

È possibile questo permissions dovrebbe essere 128, perché

128 == 10000000

Che si tradurrebbe nello zero che ti aspetti.

Altri suggerimenti

127 == 1111111, 1 == 0000001

127 & 1 == 1

QED.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top