Java Bitmasks和登录安全性

时间:2011-09-08 12:58:05

标签: java bitmask

好的,我真的不明白这个循环是如何工作的,它的逻辑陈述最让我烦恼。权限是一个常量值,我已经分配了127. Roles.java包含常量值,用于确定哪些角色可以访问网站的某些页面。麻烦是当位掩码等于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
        }
      }

2 个答案:

答案 0 :(得分:3)

每个数字的二进制等值

127 ==  1111111
1   ==        1

AND运算符将返回permissionbitMask中设置的位。所以这个结果是

              1

!= 0

permissions可能是128,因为

128 == 10000000

这会导致你期望的零。

答案 1 :(得分:2)

127 == 1111111,1 == 0000001

127&amp; 1 == 1

QED。