在HashMap中看到这么一段代码:
static int hash(Object x) {
int h = x.hashCode(); h += ~(h << 9);
h ^= (h >>> 14);
h += (h << 4);
h ^= (h >>> 10);
return h;
}一直搞不明白 其中的">>>"是什么操作符?????
static int hash(Object x) {
int h = x.hashCode(); h += ~(h << 9);
h ^= (h >>> 14);
h += (h << 4);
h ^= (h >>> 10);
return h;
}一直搞不明白 其中的">>>"是什么操作符?????
//对应二进制数为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次方