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

时间:2014-10-24 14:46:35

标签: c++

我需要检查是b字节1' st位是ON,如果是,则最后2位(.6和.7)也是ON。如何以最优雅的方式制作它?

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

优雅意味着最具可读性而不会失去性能

4 个答案:

答案 0 :(得分:3)

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

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

return (b & mask) == 1;

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

答案 1 :(得分:3)

return (b&0xC1)==0xC1;如果你真的意味着所有位都像你所说的那样开启 否则return (b&0xC1)==0x01;如果您想要与您编码的内容等效。

答案 2 :(得分:1)

试试这个:

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

答案 3 :(得分:-1)

试试这个

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

http://numbermonk.com/binary/193