我正在处理一个 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/

10-11 18:57