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