我当时正在做一个C项目,我写了下面这行代码来检查int8_t的最高有效位是否为1:
if (f & 0b10000000 == 0b10000000) {
然后CLion抛出了一个警告,告诉我‘表达式可以简化为’f != 0‘’
我可以说这是不正确的吗?我仔细阅读了按位运算,我仍然觉得这些不是等价的运算,例如f=1会在我的表达式中返回false,但这条消息让我怀疑自己。
感谢您所能提供的任何帮助!
发布于 2018-06-06 05:38:06
与==
相比,按位"and“运算符&
的优先级较低。
因此,您的表达式if (f & 0b10000000 == 0b10000000)
等同于if (f & (0b10000000 == 0b10000000))
。
如果您只想测试第7位,请尝试if (f & 0b10000000)
。任何非零值都将被视为"true“。
同样,是的: CLion是错的。原始表达式等同于if (f & 1)
,它测试0位(可能不是您想要的)。
https://stackoverflow.com/questions/50709228
复制相似问题