3

我有一系列位标志,用于订购类似的东西{none=0x00, puppies=0x01, kittens=0x02, cute=0x04, funny=0x08, scary=0x10}

每当用户进行搜索时,我只是|=他们希望的每个标志,例如,如果用户想要一些可爱的小猫,我只会search |= cutesearch |= kittens

然而,当我执行搜索操作时,通过循环并检查该项目所在的所有项目(flag & search) != 0,它会返回具有可爱属性或小猫的项目。我怎样才能改变它,让它返回可爱的属性和小猫?

4

3 回答 3

4

你用你的(flag & search)表情掩盖了不相关的标志。现在您只需要确保所有请求的标志都存在。所以,与其做(flag & search) != 0,不如做(flag & search) == search

于 2011-06-23T17:21:01.193 回答
1

if((旗帜&可爱) && (旗帜&小猫))

于 2011-06-23T17:21:11.413 回答
1

不是一次循环检查每个标志,而是检查对所有组合标志的搜索:

((flag1 | flag2 | flag3) & search) == search
于 2011-06-23T17:22:27.140 回答