int转为short的问题以及类型转换、按位与、相等优先级

今天做实验遇到了题目中的这些问题,感觉这种东西一直都没能很好的弄清楚。

下面一一列举:

1.int 转为 short 符号变化

	int i = 0x8001 ;
	short si = (short)i ;
	printf("int i = %d , short i = %d\n",i,si) ;

结果为

int i = 32769 , short i = -32767

由于short为16位数,故当int型的数据第16位为1时,就理所当然的被认为是负数了。而0x8001转为10进制就是-(2^16 -1)  =  -32767 ;

2.类型转换优先级

接上面的例子:

int iii = (short)i/1024 ;
结果为-31 。及先进行了强制转换,变为负的short,则 1000 0000 0000 0001 首先右移10位 ,为 1111 1111 1110 0000 ,注意符号位为1不变,右移左边补1,转为十进制就是-31 ;然后再默认转换位int,不变。

int iii = (short)(i/1024) ;

以上结果为32.先做了除法运算。

故由上有优先级:() > ( cast ) > /

3.按位与 和相等 优先级

 0x01 & 0x10 == 0x0

结果位false,因为 == 优先级 高于 & ,故先做 == ,为 0 ,再与,为 0 ;

((0x10 & 0x01) == 0x0)
加上括号才ok啊。

同理有 '==' / '>=' / '>' /'<' / '<=' 优先级高于 & /  | 等

最后附上全部优先级(来自http://zhidao.baidu.com/question/89746356.html):


一共有十五个优先级: 
1   ()  []  .  ->
2   !  ~   -(负号) ++  --   &(取变量地址)*   (type)(强制类型)    sizeof 
3   * / % 
4   + - 
5   >> <<  
6   > >= < <= 
7   == !=   
8   &  
9   ^   
10  |   
11  &&
12  ||
13  ?:
14   =  +=  -=  *=  /=   %=  |=   ^=   &=   >>=   <<=
15  ,
就着多吧   结合性:2   13  14  是从右至左   其他都是  从左至右


你可能感兴趣的:(这样啊,疑惑)