-3  = 0xffff fffd (11111111 11111111 11111111 11111111 11111111  11111111 11111111 11111101 )  
-3 >> 1  ==> 0xffff fffe (最后一字节 11111110)
0xffff fffe >>> 2  ==> 0x3fff ffff ( 首字节 00111111,最后一字节 11111111 )
0x3fff ffff << 1 ==> 0x7fff fffe (首字节 01111111,最后一字节 11111110 )结果是 0x7fff fffe 对应的正整数值,具体多少,不知道,去算一下吧。理由:自已去看一下什么叫补码表示,在Java 中int固定是8个字节

解决方案 »

  1.   

    呵呵,luodi兄说的基本是对了。
    不过犯了一个常识性的错误:java里面int是四个字节,32位长,不是8个字节。
    他说的结果是对的。
    十进制是2147483646。
      

  2.   

    非常感谢个位大侠小弟我有点明白是不是这样的-3  = 0xffff fffd (1111 1111 1111 1111 1111  1111 1111 11101 )  
    -3 >> 1  ==> 0xffff fffe (最后一字节 1110)
    0xffff fffe >>> 2  ==> 0x3fff ffff ( 首字节 0011,最后一字节 1111 )
    0x3fff ffff << 1 ==> 0x7fff fffe (首字节 0111,最后一字节 1110 )结果是 0x7fff fffe
     2147483646