按位运算的CLion"表达式可以简化"消息

Hgh*_*mnd 4 c clion

我正在研究一个C项目,我编写了以下行来检查int8_t的最高位是否为1:

if (f & 0b10000000 == 0b10000000) {
Run Code Online (Sandbox Code Playgroud)

和克里昂发出警告,告诉我'表情可以简化为"f!= 0"'

我是否正确地说这是不正确的?我读过bitwise操作以确定并且我仍然认为这些操作不是等效的操作,例如f = 1会在我的表达式中返回false,但是这条消息让我怀疑自己.

谢谢你提供的所有帮助!

squ*_*age 8

按位"和"运算符的&优先级低于==.

因此,你的表达if (f & 0b10000000 == 0b10000000)相当于if (f & (0b10000000 == 0b10000000)).

如果您只想测试第7位,请尝试if (f & 0b10000000).任何非零值都将被视为"true".

还有,是的:克里昂错了.你的原始表达式相当于if (f & 1),它测试第0位(可能不是你想要的).