2011-06-23 19 views
3

私は{none=0x00, puppies=0x01, kittens=0x02, cute=0x04, funny=0x08, scary=0x10}のようなものを注文する一連のビットフラグを持っています。ビットごとのフラグの問題

ユーザーが検索を行うたびに、私はちょうど|=のそれぞれのフラグを望みます。ユーザーがかわいい子猫のものを望むならば、私はちょうどsearch |= cutesearch |= kittensだろう。

しかし、検索操作を実行すると、そのアイテムの(flag & search) != 0のすべてのアイテムをループしてチェックすると、代わりにかわいい属性OR子猫を持つアイテムが返されます。かわいいアトリビュートと子猫を返すように、これをどうやって変更できますか?

答えて

4

(flag & search)式で無関係のフラグをマスクしました。今すぐすべて要求フラグが存在することを確認するだけです。したがって、(flag & search) != 0の代わりに(flag & search) == searchを実行してください。

+0

((flag1 | flag2 | flag3) & search) == search 
本当にありがとう!それは今やいくらか意味がありました! –

1

代わりに一度に各フラグ一方をループし、確認の((フラグ&キュート)& &(フラグ&子猫))

1

場合、結合されたすべてのフラグに対する検索をチェック:

関連する問題