public class Move
{  
  public static void main(String args[])
  {
    
    
    System.out.println((byte)(-5>>2) );
    System.out.println((byte)(-5>>>2) );
    }
}
--------------------Configuration: <Default>--------------------
-2
-2Process completed为什么结果一样呢,〉〉〉不是高位补00吗?

解决方案 »

  1.   

    -5>>2
    -5的补码计算:1000 0000 0000 0000 0000 0000 0000 0101
            取反:1111 1111 1111 1111 1111 1111 1111 1010    //负数,符号位不变
              +1:1111 1111 1111 1111 1111 1111 1111 1011
             >>2:1111 1111 1111 1111 1111 1111 1111 1110    //负数,高位补1
    (byte)(-5>>2):1111 1110           //int转换成byte,截掉高位
    反转换补码:  1000 0010   = -2
    -5>>>2
    -5的补码计算:1000 0000 0000 0000 0000 0000 0000 0101
            取反:1111 1111 1111 1111 1111 1111 1111 1010    //负数,符号位不变
              +1:1111 1111 1111 1111 1111 1111 1111 1011
            >>>2  0011 1111 1111 1111 1111 1111 1111 1110    //高位补0
    (byte)(-5>>2):1111 1110           //int转换成byte,截掉高位
    反转换补码:  1000 0010   = -2
                
             
      

  2.   

    打错了点,^-^
    -5>>2
    -5的补码计算:1000 0000 0000 0000 0000 0000 0000 0101
            取反:1111 1111 1111 1111 1111 1111 1111 1010    //负数,符号位不变
              +1:1111 1111 1111 1111 1111 1111 1111 1011
            >>2:1111 1111 1111 1111 1111 1111 1111 1110    //负数,高位补1
    (byte)(-5>>2):1111 1110          //int转换成byte,截掉高位
    反转换补码:  1000 0010  = -2
    -5>>>2
    -5的补码计算:1000 0000 0000 0000 0000 0000 0000 0101
            取反:1111 1111 1111 1111 1111 1111 1111 1010    //负数,符号位不变
              +1:1111 1111 1111 1111 1111 1111 1111 1011
            >>>2  0011 1111 1111 1111 1111 1111 1111 1110    //高位补0
    (byte)(-5>>>2):1111 1110          //int转换成byte,截掉高位
    反转换补码:  1000 0010  = -2
                
      

  3.   


    你转换的时候用了(byte)转换,改成如下:public class Move

      public static void main(String args[])
      {
       
       
        System.out.println( -50>>2 );     // 去掉byte的强制转换   输出-13
        System.out.println( -50>>>2 );    //输出一个很大的整数,0011 1111 1111 1111 1111 1111 1111 1110 == 一个很很大的数...
        }
    }
      

  4.   

    改成下面这样((byte)-50)>>>2  == 51