我正在开发一个C项目,我编写了以下行来检查int8_t的最高位是否为1:
if (f & 0b10000000 == 0b10000000) {
和克里昂发出警告,告诉我'表情可以简化为" f!= 0"'
我说这是不对的吗?我读过bitwise操作以确定并且我仍然认为这些操作不是等效的操作,例如f = 1会在我的表达式中返回false,但是这条消息让我怀疑自己。
感谢您提供任何帮助!
答案 0 :(得分:8)
按位"和"运算符&
的优先级低于==
。
因此,您的表达式if (f & 0b10000000 == 0b10000000)
相当于if (f & (0b10000000 == 0b10000000))
。
如果您只想测试第7位,请尝试if (f & 0b10000000)
。任何非零值都将被视为" true"。
另外,是的:CLion错了。你的原始表达式相当于if (f & 1)
,它测试第0位(可能不是你想要的)。