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

问题描述 投票:1回答:2

我一直在搜寻google和堆栈溢出以寻求该问题的答案,但我仍无法明确找到它。

我将如何测试位掩码以查看其是否设置了一个且仅设置了一个标志? I.E如果在掩码中设置了其他任何标志,它将返回false?

我知道我可以检查遮罩是否带有任何标志。

(currentFlags & state) == state

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

我确实在SE上看到了该线程。 Methods to form and check bitmasks我不确定这面膜和魔术的东西是否正是我想要的东西,如果是,我对它的用法有些迷惑。

bit bitmask bitflags
2个回答
1
投票

如果仅是单个标志,则==运算符就足够了,因为您确切知道要查找的值。因此,在您的情况下:

currentFlags == state

会做这项工作。

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


0
投票

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

(currentFlags & (currentFlags - 1)) == 0
© www.soinside.com 2019 - 2024. All rights reserved.