本人查看了全部比较经典的常用哈希函数的实现,在最后返回哈希值的时候它们都使用了:
return (hash & 0x7FFFFFFF);
这种做法本人看了一下是将哈希值限制在 31 位,但是一般哈希的值是 unsigned int 型也就是有 32 位,那么这里限制在 31 位不知道有什么特殊的用意。
请大家帮忙解释一下,多谢!
解决方案
5
0x7FFFFFFF 是质数,0xFFFFFFFF 不是
20
关键在于一个对象的 HashCode可以为负数,这样操作后可以保证它为一个正整数
0x7FFFFFFF is 0111 1111 1111 1111 1111 1111 1111 1111 : all 1 except the sign bit.
(hash & 0x7FFFFFFF) 将会得到一个正整数
原因是你的hash是要作为数组的index的,这样可以避免出现下标为负数而出现异常
0x7FFFFFFF is 0111 1111 1111 1111 1111 1111 1111 1111 : all 1 except the sign bit.
(hash & 0x7FFFFFFF) 将会得到一个正整数
原因是你的hash是要作为数组的index的,这样可以避免出现下标为负数而出现异常
30
第一个问题:是的,假如第一位大于7,意味着二进制第一位相与以后可能会出现1
第二个问题:malloc只是申请一片连续的内存空间,主要和你用什么来接收这个申请的内存首地址有关
第二个问题:malloc只是申请一片连续的内存空间,主要和你用什么来接收这个申请的内存首地址有关