我正在处理一个 C 项目,我写了以下行来检查 int8_t 的最高有效位是否为 1:
if (f & 0b10000000 == 0b10000000) {
CLion 发出警告,告诉我“表达式可以简化为“f != 0””
我会说这是不正确的吗?我仔细阅读了按位运算以确保,我仍然觉得这些不是等效的运算,例如 f = 1 会在我的表达式中返回 false,但是这条消息让我怀疑自己。
谢谢你提供的所有帮助!
最佳答案
按位“与”运算符 &
的优先级低于 ==
。
因此,您的表达式 if (f & 0b10000000 == 0b10000000)
等效于 if (f & (0b10000000 == 0b10000000))
。
如果您只想测试第 7 位,请尝试 if (f & 0b10000000)
。任何非零值都将被视为“真”。
另外,是的:CLion 是错误的。您的原始表达式等效于 if (f & 1)
,它测试位 0(可能不是您想要的)。
关于按位运算的 CLion "Expression can be simplified"消息,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50709228/