克里昂"表达可以简化"按位运算的消息

时间:2018-06-05 21:30:56

标签: c clion

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

if (f & 0b10000000 == 0b10000000) {

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

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

感谢您提供任何帮助!

1 个答案:

答案 0 :(得分:8)

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

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

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

另外,是的:CLion错了。你的原始表达式相当于if (f & 1),它测试第0位(可能不是你想要的)。