在HashMap中看到这么一段代码:
static int hash(Object x) {
        int h = x.hashCode();        h += ~(h << 9);
        h ^=  (h >>> 14);
        h +=  (h << 4);
        h ^=  (h >>> 10);
        return h;
    }一直搞不明白 其中的">>>"是什么操作符?????

解决方案 »

  1.   

    答:h >>> 10 含义:将h向右移10位,左边空出的10位全填0
      

  2.   

    int x = 0x80000000;
            //对应二进制数为1000,0000,0000,0000,0000,0000,0000,0000
            int y;
            y = x>>1;//前面补1变成
            //1100,0000,0000,0000,0000,0000,0000,0000,0000
            System.out.println(y);//-1073741824
    int x = 0x80000000;
    //对应二进制数为1000,0000,0000,0000,0000,0000,0000,0000
    int y;
    y = x>>>1;//前面补1变成
    //0100,0000,0000,0000,0000,0000,0000,0000,0000
    System.out.println(y);
    //我们知道二进制数最前面一位代表正负0为正1为负
    //>>>和>>
    //>>>是不管以前是多少直接在前面补0
    //>>是以前前面是1就补1是0就补0
    //移位中要注意的:
    //低于int的 编译器先把数据提升为int再移位
    //int是32位数据所以移位33和移位1效果是一样的 
    //同理long是64为数据移位65和移位1效果是一样的
    //可以这样说a>>b移位实际是 b除以a的数据位数(32或64)再取模
    //移位不会改变变量的的值 比如a>>1这毫无意义; b=a>>1才有意义
    //x>>1与x/2结果一样 x<<2和x*4结果也一样
    //总之一个数左移n位等于这个数乘以2的n次方
    //右移n位等于这个数除以2的n次方