比较布尔值

问题描述 投票:0回答:1

看似简单的问题:说我有一组以uint16_t flags编码的标志。例如,AMAZING_FLAG = 0x02。现在,我有一个功能。此功能需要检查是否要更改标志,因为如果要更改标志,则需要写入闪存。那很贵。因此,我想要检查以告知标志和AMAZING_FLAG是否等于doSet。这是第一个想法:

setAmazingFlag(bool doSet)
{
    if ((flags & AMAZING_FLAG) != (doSet ? AMAZING_FLAG : 0)) {
        // Really expensive thing
    }
}

现在,我很难理解if语句。我觉得应该有更好的方法,例如

if ((flags & AMAZING_FLAG) != doSet){

}

但是这实际上不起作用,true似乎等于0x01。

所以,有没有一种比较简单的方法可以将布尔值与布尔值进行比较?

c gcc boolean bitwise-operators
1个回答
0
投票
要获得逻辑值,您将使用比较

(flags & AMAZING_FLAG) == AMAZING_FLAG

并且现在可以将此逻辑值与doSet进行比较。

if ((flags & AMAZING_FLAG == AMAZING_FLAG) != doSet)

在C中可能会有缩写,因为数字到布尔值的隐式转换规则。所以你也可以写

if (!(flags & AMAZING_FLAG) == doSet)

简短地写。但是在可读性方面,前一个版本更好。

© www.soinside.com 2019 - 2024. All rights reserved.