Frage

Ok, ich verstehe nicht wirklich, wie diese Schleife funktioniert, es ist die logische Anweisung, die mich am meisten nervt. Berechtigungen sind ein konstanter Wert, den ich zugewiesen habe. Problem ist, dass die logische Anweisung true zurückgibt, wenn Bitmaske gleich ist. Wie ist das möglich?

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
        }
      }
War es hilfreich?

Lösung

Das binäre Äquivalent jeder dieser Zahlen

127 ==  1111111
1   ==        1

Der und der Betreiber würden Bits zurückgeben, die in beiden festgelegt sind permission UND bitMask. Das resuilt ist also

              1

welches ist != 0

Es ist möglich, dass permissions sollte sein 128, Weil

128 == 10000000

Dies würde zu der von Ihnen erwarteten Null führen.

Andere Tipps

127 == 1111111, 1 == 0000001

127 & 1 == 1

Qed.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top