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

java中的位移操作
public class Displacement
{
public static void main(String args[])
{
System.out.println(-15>>2);
System.out.println(-15>>>2);
System.out.println(-15<<2);
System.out.println(15>>2);
System.out.println(15<<2);


System.out.println("************");
System.out.println(-14>>2);
System.out.println(-14>>>2);
System.out.println(-14<<2);
System.out.println(14>>2);
System.out.println(14<<2);


}
}
结果如下:
-4 (注意:-15与-14向右移两位的结果都为-4,为什么?)
1073741820 (注意-15>>>2与-14>>>2的结果一样,为什么?) 
-60
3
60
************
-4
1073741820
-56
3
56
Press any key to continue...
请问:负数的向右位移是如何移动的?为什么负数的向左移结果正常,向右移运算结果就不在意料之中呢?

------解决方案--------------------
你再尝试下 >> 34, >>> 36
------解决方案--------------------
可能是高位进位产生的吧
------解决方案--------------------
楼主把数都用2进制表示,再去看移位,你就明白了。
注意:负数要表示成2的补码形式。
<<和>>表示算术移位,<<<和>>>表示逻辑移位。
算术移位是保持符号位的,逻辑移位在不对符号位做特殊处理。