我有以下代码。它用于做一些简单的位操作。
int x = 12; // (00...01100)
int y = 1;
int result;
result = x & y;
printf("x is %d\n", x); // 12
printf("y is %d\n", y); // 1
printf("result is %d\n", result); // 0
printf("x & y is %d\n", x & y); // 0
printf("!(x & y) is %d\n", !(x & y)); // 1
printf("x & y == 0 is %d\n", x & y == 0); // 0 why not true?
printf("result == 0 is %d\n", result == 0); // 1
printf("size of x & y is %d\n", sizeof(x & y)); // 4
printf("size of result is %d\n", sizeof(result)); // 4
为何选择x& y == 0不是TRUE?
答案 0 :(得分:1)
运营商优先权在这里很重要:
x & y == 0
相当于
x & (y == 0)
是 false。
答案 1 :(得分:0)
这可能是您的语言中运算符优先级的问题。 x& y == 0解析为(x& y)== 0或x&(y == 0)? 当x = 12且y = 1时,前者评估为1,后者评估为0。