首页 > 解决方案 > 如何检查位掩码是否包含位?

问题描述

我有以下位掩码

class FLAG(IntEnum):
   DEFAULT = 0b0

和一个处理它们的类:

class Converter:
  def has_flag(self, val):
    return self._descriptor & val == val

我发现该has_flag方法包含一个错误,因为每个其他标志都包含一个DEFAULT标志。解决这个问题的最佳方法是什么? flags 是互斥的。

我找到了以下解决方案:

def has_flag(self, val):
    if val == FLAG.DEFAULT:
        return self._descriptor == val
    return self._descriptor & val == val

有没有其他方法可以修复该错误?

标签: pythonalgorithm

解决方案


由于 DEFAULT_ZERO 并不是真正的标志(它是没有标志),因此需要区别对待;你提出的方法是完全合理的。

请注意,您也不能设置 DEFAULT_ZERO 标志,因为它不是标志。


推荐阅读