字长n=8
x=-15;
y=x>>2;  //y=?
z=x>>>2; //z=?
老师给的答案是:
x=1111 0001
y=1111 1100   y=-4
z=0011 1100   z=60
跪求解释~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

解决方案 »

  1.   

    假设 x, y, z 是有符号的 8 位整数1:>> 右移时会在最左边补充一个符号位,这个符号位与移之前的符号位一致,因此 >> 表示有符号右移
    2:>>> 右移时不会在最左边补充符号位,左边就填充 0 了,因此 >>> 表示无符号右移
      

  2.   

    15的补码  00001111
    x=-15的补码 11110001
    y=x>>2 有符号右移两位 11111100 -4
    z=x>>>2 无符号右移两位00111100 60
      

  3.   

    y=x>>2; 这个是算数右移,带符号的
    z=x>>>2; 这个是逻辑右移,不带符号
      

  4.   


    正解.
    注意:如果x不是int型而是byte或short之类的,那么是先转化成int,再移位,再truncate.
       或许这和虚拟机实现有关,请哪位高手解释一下
      

  5.   

    x=-15; //x=1111 0001
    1)、15的补码: 0000 1111 
    2)、-15的补码:1111 0000 + 1=1111 0001
    -----------------------------------------------------
    y=x>>2;//y=-4
    1)1111 0001>>2=1111 1100(最高位符号位)
    2)1111 1100这是y的补码
    3)原码:1000 0011+1=1000 0100=-4
    -----------------------------------------------------
    z=x>>>2//无符号右移,z=60
    1)1111 0001>>2=0011 1100(最高位符号位)
    2)0011 1100这是z的补码
    3)原码同补码:0011 1100 = 0x3C=60
      

  6.   

    1到16楼解答的都很正确
    其实这是java基础问题
    楼主要好好看看java的基础哦
    记住的话就别再忘了