按位标志问题

3
我有一系列的位标志,类似于{none=0x00, puppies=0x01, kittens=0x02, cute=0x04, funny=0x08, scary=0x10}等等。每当用户进行搜索时,我只需使用|=将他们希望的每个标志都加上,例如如果用户想要可爱的小猫,我会使用search |= cutesearch |= kittens
然而,当我执行搜索操作时,通过循环检查所有具有(flag & search) != 0的项目,它返回具有可爱属性或小猫的项目。如何更改此设置以返回具有可爱属性和小猫的项目?
3个回答

4

您已使用(flag & search)表达式屏蔽了无关的标志。现在您只需要确保所有请求的标志都存在。所以,不要使用(flag & search) != 0,而是使用(flag & search) == search


非常感谢!现在有些意思了! - user499054

1

不要循环并逐个检查每个标记,而是检查搜索是否与所有标记组合匹配:

((flag1 | flag2 | flag3) & search) == search

1

如果((flags&cute) && (flags&kittens))


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接