我需要检查b字节的第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;


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

关于c++ - 优雅的二进制比较操作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26550352/

10-11 22:59