1

我一直在搜索谷歌和堆栈溢出来寻找这个问题的答案,但我无法明确找到它。

我将如何测试位掩码以查看它是否设置了一个且只有一个标志?IE 如果在掩码内设置了任何其他标志,它会返回 false?

我知道我可以检查面具是否有任何标志。

(currentFlags & state) == state

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

我确实在 SE 上看到了这个帖子。形成和检查位掩码的方法我不确定这个掩码和魔法是否是我正在寻找的东西,如果是的话,我对它的使用方式有点迷茫。

4

2 回答 2

2

如果它只是一个标志,那么==运算符就足够了,因为您确切地知道您正在寻找什么值。所以在你的情况下:

currentFlags == state

会做的工作。

如果您想检查是否设置了多个标志(特定组合),您可以使用|=运算符构建一个值,然后使用==.

于 2014-07-17T15:47:14.813 回答
1

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

(currentFlags & (currentFlags - 1)) == 0
于 2020-05-28T07:44:55.037 回答