二进制比较操作的优雅方式



我需要检查b字节1的第1位是否为ON,如果是,最后2位(.6和.7)也为ON。如何以最优雅的方式实现它?

bool myStatus::isReady()
{
    return ((b&0x01) && (b&0xC0==0)) ;
}

优雅意味着在不损失性能的情况下可读性最强

怎么样

bool myStatus::isReady() const
{
    static auto const mask = 0b11000001; // Or 0xC1
    return (b & mask) == mask;
}

这相当于您的描述,但不是您的解决方案。等效代码必须将比较的右操作数更改为1,即

return (b & mask) == 1;

还要注意,没有大括号的解决方案是错误的,因为&的优先级低于==

如果您真的想像您所说的那样打开所有位,请选择return (b&0xC1)==0xC1;
否则return (b&0xC1)==0x01;,如果您想要与您编码的内容等效的内容。

试试这个:

return (b & 0xC1) == 0x01;

尝试这个

bool myStatus::isReady()
{
    return (b & 0xc0) && (b & 0x1);
}

http://numbermonk.com/binary/193

最新更新