假设我有一组标志,用 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
.那么,有没有一种巧妙的方法可以将一点与 boolean 值进行比较?
最佳答案
要将任何非零数字转换为 1(真),有一个古老的技巧:应用 !
(not) 运算符两次。
if (!!(flags & AMAZING_FLAG) != doSet){
关于有点与 boolean 值的比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60317850/