c中的奇怪问题
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
unsigned short a ;
unsigned short b;
unsigned short c,d;
// scanf("%hd",&a);
// scanf("%hd",&b);
a= 45057;
b = 49158;
printf("%x\n",a);
printf("%x %x %x\n", a<<2,a>>14,(a<<2)|(a>>14 ));
printf("%x\n",b);
if(((a<<2)|(a>>14 )) == b)
printf("yes\n");
system("pause");
return 0;
}
这是用c编的一个小程序。上面代码红色的部分在((a<<2)|(a>>14)) == b 加上两边红色的括号后,就不能打印yes,去掉红色的括号就能打印yes,有谁能解释一下为什么吗
[解决办法]
加括号:
( (a<<2) | (a>>14) ) == b
不加括号:
(a<<2) | (a>>14) == b
[解决办法]
a<<2 = 2c004
a>>14 = 2
b = c006
加括号:( (a<<2) | (a>>14) ) == b( (a<<2) | (a>>14) ) = 2c006显然不等于b。 上述为0
不加括号:(a<<2) | ((a>>14) == b)((a>>14) == b)不等于1,按位或之后为1
所以加上括号了不能打印,不加括号可以打印