本帖最后由 郝亚平 于 2011-12-2 18:20 编辑
代码例子:
class Test{
public static void main(String args[]){
System.out.println((-6)>>3);//-1
System.out.println((6)>>3);//0
System.out.println((-6)<<3);//-48
System.out.println((6)<<3);//48
}
}
分析:
看前两行输出语句:对于向右移动的情况,无论是正数还是负数,都是高位方向空出位来,高位方向决定了数据的正负,所以,这里,这个补什么,必须要看是正数还是负数,也就是看高位起始位是0还是1,是什么就补什么。总结下:高位方向空位补0还是补1,要看移动前原始数据的高位是0还是1,即正负性。
看后两行输出语句:对于向左移动的情况,无论是正数还是负数,都是低位方向空出来位来,这个地方不决定数据的正负,所以,都是补充为0.即为:低位方向空位永远补充0.
遵循此原则,应该就不会出错了。
|