1

わかりました、このループがどのように機能するかを本当に理解していません。私を最も悩ませている論理ステートメントです。permissions は、127 を割り当てた定数値です。Roles.java には、Web サイトの特定のページにアクセスできるロールを決定する定数値が含まれています。問題は、ビットマスクが 1 に等しい場合に論理ステートメントが true を返すことです。これはどのように可能ですか?

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
        }
      }
4

2 に答える 2

3

これらの各数値に相当する 2 進数

127 ==  1111111
1   ==        1

AND 演算子は、両方のpermissionANDで設定されたビットを返しますbitMask。したがって、結果は

              1

これは!= 0

である可能性がpermissionsあります128

128 == 10000000

これにより、期待するゼロが得られます。

于 2011-09-08T13:02:55.027 に答える
2

127 == 1111111、1 == 0000001

127 & 1 == 1

QED。

于 2011-09-08T13:02:11.727 に答える