为什么x&当x = 12且y = 1时,y == 0不成立?

时间:2016-07-15 15:09:16

标签: bit-manipulation

我有以下代码。它用于做一些简单的位操作。

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?

2 个答案:

答案 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。