thinkjava第三版中说:带符号的右移位>>使用“根据正负号来扩展的规则:如果这个值是正的,
则高位一律填零;如果这个值是负的,则高位一律填一。
但是:System.out.println(-1>>1);输出的结果还是 -1
这是为什么啊?

解决方案 »

  1.   

    -1 在计算机中是用补码的形式存储的,也就是 0x FF FF FF FF,一共32个1,
    那么-1>>1,高位填1,这个数值仍然不变,还是-1
      

  2.   

    这里的-1是int型,占4字节,存在机器中用-1的补码表示:11111111 11111111 11111111 11111111
    ,当-1右移时在内存中的数没有变化,所以输出仍为-1
      

  3.   

    -1 int
    原 1000 0000 0000 0000 0000 0000 0000 0001
    反 1111 1111 1111 1111 1111 1111 1111 1110
    补 1111 1111 1111 1111 1111 1111 1111 1111-1>>1
    1111 1111 1111 1111 1111 1111 1111 1111 >>1 1111 1111 1111 1111 1111 1111 1111 1111