测试位掩码是否只有一个标志

时间:2014-07-17 15:41:11

标签: bit bitmask bitflags

我一直在搜索谷歌和堆栈溢出来回答这个问题而且我还没能明确找到它。

我如何测试一个位掩码,看看它是否只有一个,并且只设置了一个标志? I.E如果在面具内设置了任何其他标志,它会返回false吗?

我知道我可以检查掩码是否有任何标记。

(currentFlags & state) == state

我认为检查一个掩码是否只有一个标志有点复杂。我访问过的每个网站都解释了bitmasking,它具有典型的添加/删除/等等,但从未提及单一检查。

我确实在SE上看到了这个帖子。 Methods to form and check bitmasks我不确定这个面具和神奇的东西是不是我要找的东西,如果是的话,我对它的使用方式有点迷失。

2 个答案:

答案 0 :(得分:1)

如果它只有一个标记,则==运算符就足够了,因为您确切知道您正在查找的值。所以在你的情况下:

currentFlags == state

可以胜任。

如果您想检查是否设置了多个标记(特定组合),您可以使用|=运算符构建值,然后使用==进行比较。

答案 1 :(得分:1)

对于那些偶然发现“一个也只有一个”的人,是指检查您是否在整数上设置了“只有一个标志,但没有任何一个特定标志”:

(currentFlags & (currentFlags - 1)) == 0