byte a=-127;
    for(int i=0;i<8;i++)
    {
      a=(byte)(a>>>1);
      System.out.println(a);    }结果是:-64,-32,-16,-8,-4,-2,-1,-1显然是带符号右移,但>>>按理来说应该是不带符号的右移啊,咋整呀,同志们?

解决方案 »

  1.   

    byte a=-127;
        for(int i=0;i<8;i++)
        {
          int ba=a>>>1;
          a=(byte)ba;
          System.out.println(ba);
        }你要看效果应该这样才能看得到
    它的输出是:
    2147483584
    2147483616
    2147483632
    2147483640
    2147483644
    2147483646
    2147483647
    2147483647
    这样就全都是正数了
      

  2.   

    运算步骤:
    a=-127                1111 1111
    a晋升为int            1111 1111 1111 1111 1111 1111 1000 0001
    无符号右移            0111 1111 1111 1111 1111 1111 1100 0000
    强制转为byte          1100 0000
    输出                  -64负号来自于向下强制转型。你要多移个百来十位,它就转正老~
      

  3.   

    像移动等运算符只对int值有效,所以都会先转为int再移
    你移完后如果转成byte,那它的高位肯定还是1,当然会出现负数的情况了
      

  4.   

    To:flyingghost, Java用原码表示数据吗?按理来说应该用补码吧.