关于常见哈希函数的疑问,求指导惑

C语言 码拜 9年前 (2016-04-13) 832次浏览
本人查看了全部比较经典的常用哈希函数的实现,在最后返回哈希值的时候它们都使用了:

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的,这样可以避免出现下标为负数而出现异常

30

第一个问题:是的,假如第一位大于7,意味着二进制第一位相与以后可能会出现1
第二个问题:malloc只是申请一片连续的内存空间,主要和你用什么来接收这个申请的内存首地址有关

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明关于常见哈希函数的疑问,求指导惑
喜欢 (0)
[1034331897@qq.com]
分享 (0)