如果位掩码包含一点,如何检查?

时间:2018-05-09 13:06:36

标签: python algorithm

我有以下位掩码

class FLAG(IntEnum):
   DEFAULT = 0b0

和一个处理它们的课程:

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

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

我找到了以下解决方案:

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

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

1 个答案:

答案 0 :(得分:1)

由于DEFAULT_ZERO实际上并不是一个标志(它没有标志),因此需要区别对待;你建议的方式是完全合理的。

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