【问题标题】:Testing if a bitmask has one and only one flag测试位掩码是否只有一个标志
【发布时间】:2014-09-08 14:06:22
【问题描述】:

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

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

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

(currentFlags & state) == state

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

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

【问题讨论】:

    标签: bit bitmask bitflags


    【解决方案1】:

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

    currentFlags == state
    

    会做的。

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

    【讨论】:

    • 我什至没有想到尝试使用 == 运算符。有时最优雅的解决方案是最简单的。谢谢!
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2017-04-23
      • 1970-01-01
      • 1970-01-01
      • 2021-09-21
      • 2015-02-24
      • 2017-05-11
      • 2011-11-14
      • 2019-12-22
      • 1970-01-01
      相关资源
      最近更新 更多