假设我有一组以uint16_t编码的标志flags
。例如,AMAZING_FLAG = 0x02
。现在,我有一个功能。此函数需要检查是否要更改标志,因为如果要更改标志,则需要写入闪存。那很贵。因此,我想要一张支票告诉我是否flags & AMAZING_FLAG
等于doSet
。这是第一个想法:
setAmazingFlag(bool doSet)
{
if ((flags & AMAZING_FLAG) != (doSet ? AMAZING_FLAG : 0)) {
// Really expensive thing
// Update flags
}
}
这不是直观的if语句。我觉得应该有更好的方法,例如:
if ((flags & AMAZING_FLAG) != doSet){
}
但这实际上不起作用,true
似乎等于0x01
。
因此,有没有一种比较布尔值的好方法?
(flags & AMAZING_FLAG) && doSet
吗?