首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

c中的奇怪有关问题

2012-10-29 
c中的奇怪问题#include stdio.h#include stdlib.hint main(void){unsigned short a unsignedshort b

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

所以加上括号了不能打印,不加括号可以打印

热点排行