Побитовый флаг - PullRequest
       35

Побитовый флаг

3 голосов
/ 23 июня 2011

У меня есть серия битовых флагов, которые упорядочивают что-то вроде {none=0x00, puppies=0x01, kittens=0x02, cute=0x04, funny=0x08, scary=0x10} и так далее.

Всякий раз, когда пользователь выполняет поиск, я просто |= каждый из флагов, которые они хотят, например, если пользователь хочет что-то милых котят, я бы просто search |= cute и search |= kittens.

Тем не менее, когда я выполняю операцию поиска, перебирая и проверяя все свои предметы, где этот предмет имеет (flag & search) != 0, он вместо этого возвращает предметы, которые имеют симпатичные атрибуты ИЛИ котят.Как я могу изменить это так, чтобы он возвращал милые атрибуты и котят?

Ответы [ 3 ]

4 голосов
/ 23 июня 2011

Вы скрыли нерелевантные флаги своим выражением (flag & search).Теперь вам просто нужно убедиться, что все запрошенные флаги присутствуют.Поэтому вместо (flag & search) != 0 сделайте (flag & search) == search.

1 голос
/ 23 июня 2011

Вместо того, чтобы зацикливаться и проверять каждый флаг по одному, проверьте поиск по всем объединенным флагам:

((flag1 | flag2 | flag3) & search) == search
1 голос
/ 23 июня 2011

if ((флаги и милые) && (флаги и котята))

...