Java битовые маски и безопасность входа - PullRequest
1 голос
/ 08 сентября 2011

Хорошо, я действительно не понимаю, как работает этот цикл, его логическое утверждение доставляет мне больше всего неприятностей.permissions - это постоянное значение, которое я назначил 127. Roles.java содержит постоянные значения, которые определяют, какие роли могут иметь доступ к определенным страницам веб-сайта.Проблема в том, что логическое утверждение возвращает истину, когда битовая маска равна единице.Как это возможно?

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 ]

3 голосов
/ 08 сентября 2011

Бинарный эквивалент каждого из этих чисел

127 ==  1111111
1   ==        1

Оператор AND возвращает биты, которые установлены как в permission, так и в bitMask. Таким образом, результат составляет

              1

, что != 0

Возможно, что permissions должно быть 128, потому что

128 == 10000000

Что приведет к ожидаемому нулю.

2 голосов
/ 08 сентября 2011

127 == 1111111, 1 == 0000001

127 & 1 == 1

КЭД.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...