我需要检查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