我一直在搜寻google和堆栈溢出以寻求该问题的答案,但我仍无法明确找到它。
我将如何测试位掩码以查看其是否设置了一个且仅设置了一个标志? I.E如果在掩码中设置了其他任何标志,它将返回false?
我知道我可以检查遮罩是否带有任何标志。
(currentFlags & state) == state
我认为检查掩码是否只有一个标志会更加复杂。我访问过的每个站点(解释位掩码)都具有典型的添加/删除/等,但从未提及过单个检查。
我确实在SE上看到了该线程。 Methods to form and check bitmasks我不确定这面膜和魔术的东西是否正是我想要的东西,如果是,我对它的用法有些迷惑。
如果仅是单个标志,则==
运算符就足够了,因为您确切知道要查找的值。因此,在您的情况下:
currentFlags == state
会做这项工作。
如果要检查是否设置了多个标志(特殊组合),可以使用|=
运算符构建一个值,然后使用==
进行比较。
对于那些偶然发现这种情况的人,他们期望“一个也只有一个”指的是检查您是否在整数上设置了“只有一个标志,但没有任何一个特定标志:
(currentFlags & (currentFlags - 1)) == 0