日期:2014-05-20  浏览次数:20957 次

system.out.println(-8>>>2),输出1073741822。求解释。谢谢。
system.out.println(-8>>>2),输出1073741822。求解释。谢谢。

------解决方案--------------------
在JAVA中 int是一个含符号的变量
0x0~0x7FFFFFFF为正数,0x80000000~0xFFFFFFFF为负数。
其中0xFFFFFFFF表示的是-1,-8是用0xFFFFFFF8表示的。
把这个数无符号右移2位,就是0x3FFFFFFE;
把这个数有符号右移2位,就是0xFFFFFFFE;
(用计算器把它转换一下吧?)
------解决方案--------------------
-8: 1111 1111 1111 1111 1111 1111 1111 1000 或者0xfffffff8
无符号右移两位: 0011 1111 1111 1111 1111 1111 1111 1110 或者0x3ffffffe