逻辑或非符号右移位运算符>>>主要作用于位图,而不是一个值的算术意义;它总是将零置于最重要的位上。例如:
1010 ... >> 2 gives 111010 ...
1010 ... >>> 2 gives 001010 ...在移位的过程中, >>运算符使符号位被拷贝。注意──移位运算符将它们右侧的操作数模32简化为int类型左侧操作数, 模64简化为long类型右侧操作数。因而, 任何int x, x >>> 32都会导致不变的x值, 而不是你可能预计的零。注意------值得称赞的重要一点是: >>>运算符仅被允许用在整数类型, 并且仅对int和long值有效。如果用在short或byte值上, 则在应用>>>之前, 该值将通过带符号的向上类型转换被升级为一个int。有鉴于此,无符号移位通常已成为符号移位。

解决方案 »

  1.   

    我还是有点不懂(不要骂我啊)我执行下面的代码
    public class URShift {
      public static void main(String[] args) {
          int a = -1;
          a >>>= 10;
          System.out.println(a);
      }
    }结果是4194303
    能不能告诉我这个记过怎么出来的?
      

  2.   

    因为负数的二进制最左未用1表示比如 10000101101 如果现在 直接右移 2 位 变成 00100001011
    这样最左位是 0 ,它是个正数。为了保持它还是负数,所以用 >>>  这样上面的结果是 10100001011最左位保持 1
      

  3.   

    Sorry ,我说反了  *^^*反正就是这个意思啦,表鄙视我
      

  4.   

    >>>在移动时,符号位一起向右移动,左边用0填充。
      

  5.   

    能不能告诉我,我贴的代码里 -1>>>10 怎么会是4194303?
      

  6.   

    你声明的是32位的整数,-1在以补码表示,第一位为符号位:
    11111111111111111111111111111110>>>10时,第一位的符号位及后面的一起向右移动10位,以0来填补。
    00000000001111111111111111111111
    结果为4百多万。