0x7FFFFFFF是以十六进制表示的整数,是整数中最大的值
转换为二进制
0x7fffffff 01111111111111111111111111111111111111111111111111111111111111111111111111111111111111131 (前31个1个1表示数值)为整数型最高有效比特,符号比特0为
得到hash及其分位数和正数
为什么不使用Math.abs,是因为如果计算出这个hash是最小的负数-2^31,正整数没有表示这个最小负数的32位,所以仍然会返回负数。 也就是说,绝对值函数返回负数。 java的int型内存的长度为32位,符号位占1位,因此可用于表示int数的范围为31位。
但是,int的范围是从“-2^31”到“2^31-1”。
这里为什么是2^31-1,这里减去1的理由是,在将二进制数变换为十进制的变换法中,将二进制数1111直接以2^4给出10进制数2^3 2^2 2^1 2^0=15的数量为16 (这里有16个但是,1111的最大可以表示的十进制整数是15,所以2^31-1这里是可以表示的最大整数!
也就是说,从“-2147483648”到“2147483647”。
关于int的范围,从“-2^31”到“2^31-1”; 请看本https://blog.csdn.net/Shi hengli 2010/article/details/51821827