我有以下情况:
#include <stdio.h>
int main(void) {
int first = 0x08;
printf("%d\n", first & 0b10);
printf("%d\n", first & 0b10 == 0);
if (first & 0b10 == 0) {
printf("SET");
} else {
printf("NOT");
}
return 0;
}
打印出两个 0
,然后是 NOT
。这里发生了什么?看来 first & 0b01
为零,所以应该通过条件。
最佳答案
这是运算符优先级的问题。
按位与运算符 &
的优先级低于相等运算符 ==
。所以这个:
first & 0b10 == 0
等同于:
first & (0b10 == 0)
这不是你想要的。它比较 0b10
与 0 是否相等,0 为假。然后 first & 0
被计算为 0。
添加括号以获得所需的行为:
(first & 0b10) == 0
关于c - 按位与的结果似乎为 0,但实际上不是,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54523134/