-4 >> 1 = -2
把-4转化为100,向右移1位,得到10,前面加上符号位1,得到结果-2,没问题
看这个: -3 >> 1 = -2
把-3转化为11,向右移1位,得到01,前面加上符号位1,得到结果-1,但是结果是-2
是我的计算方法错了吗?

解决方案 »

  1.   

    计算方法有问题啊.
    先把那个数转换成补码表示,然后再移位.
    为了简单起见,以byte为例进行说明
    -4:  1111,1100 (补码) 右移 1111,1110(引进一个1),再各位取反加1,0000,0010,即-2;
    -3:  1111,1101 (补码) 右移 1111,1110,同样,得到-2;
    其它类型的原理相同啊.
    先转化成补码表示啊.
      

  2.   

    不是这样的,数以补码形式存放
     -4 => FFFFFFFC
    右移1位,得到 FFFFFFFE => -2-3 => FFFFFFFD => 11111111111111111111111111111101
    右移一位,得到 11111111111111111111111111111110 => FFFFFFFE => -2
      

  3.   

    负数是用反码表示的 
    -3转化为:0000 0011->取反1111 1100->再加1->1111 1101
    -4:0000 0100->1111 1011->加1->1111 1100