A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

i = -1;
System.out.println(i);
System.out.println(Integer.toBinaryString(i));
i >>>= 10;
System.out.println(Integer.toBinaryString(i));
System.out.println(i);
i = -1;
i >>= 10;
System.out.println(Integer.toBinaryString(i));
System.out.println(i);

输出:
-1
11111111111111111111111111111111
无符号右移10位,高位填充0,结果变成了正数。
1111111111111111111111
4194303
有符号右移10位,高位填充1,结果仍然是-1。
11111111111111111111111111111111

-1

另外,对于short, byte,char这些类型,系统自动转换为int,然后进行移位操作。
如果是 >>= 或者是 <<= 这些操作符号,注意移位完毕再赋值回去的时候有截断操作,从int的32位截取右边低16位赋值回去,这可能不是想要的结果。
short b = -1;
b >>>= 10;  
b首先被转换位int 的-1,然后无符号右移10位,然后截取低16位赋值回去给b,结果仍然是-1。

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马