答案是2。
&是位与操作,就是取两个数同为1的位。
譬如x是0b00000010,y是0b00000011,最低位两个操作数有一个是0,那么结果中这位就是0;次低位两个操作数都是1,那么结果中这位就是1;高位上两个操作数全是0,结果中这些位当然也是0。结果就是0b00000010。
(0b开头表示二进制,0开头表示八进制,0x开头表示十六进制。八进制和十六进制本质上是把二进制“三(四)位合一”的写法,可以避免人眼看起来眼花缭乱)
注意二进制词汇:“设置”“打开”等都表示设为1;“清除”“关闭”等都表示设为0。
一个简单的应用:奇数的最低位都是1,偶数的最低位都是0。那么就可以用n&1来判断奇偶(如果你还在写n%2==0,说明你还在用人的十进制思维思考问题,没有以计算机的方式思考)。如:
unsigned int n;
scanf("%u", &n); //一个操作数的&是寻址
printf("%u is a %s number.\n", n, n&1 ? "odd" : "even"); //两个操作数的&是位与