好的,我真的不明白这个循环是如何工作的,它的逻辑陈述最让我烦恼。权限是一个常量值,我已经分配了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
}
}
答案 0 :(得分:3)
每个数字的二进制等值
127 == 1111111
1 == 1
AND运算符将返回permission
和bitMask
中设置的位。所以这个结果是
1
是!= 0
permissions
可能是128
,因为
128 == 10000000
这会导致你期望的零。
答案 1 :(得分:2)
127 == 1111111,1 == 0000001
127&amp; 1 == 1
QED。