FNV算法中,32位和64位的位数长度不一致吗?

menuvb 2011-08-03 04:41:21
今天在找一个HASH算法,能够自动生成二进制的长度位数是32或64的。以前听说过FNV算法,我以为它32bit和64bit生成的二进制位数会是32或64,但测试下来并不是这样。下面一段32位的代码

def FNVHash(key):
fnv_prime = 16777619
hash = 2166136261
for i in range(len(key)):
hash *= fnv_prime
hash ^= ord(key[i])
return hash

测试 'abcd'字符串二进制位数只有28,难道还要我补上四个0么。同样的,64bit也不是64的长度。这样下来,我是不是可以理解成 FVN输出的结果只是32位的数字和64的数字,跟位数的长度并有任何关系?

下面是网上一段32位的HASH函数
public static int hash32shift(int key)
{
key = ~key + (key << 15); // key = (key << 15) - key - 1;
key = key ^ (int)((uint)key >> 12);
key = key + (key << 2);
key = key ^ (int)((uint)key >> 4);
key = key * 2057; // key = (key + (key << 3)) + (key << 11);
key = key ^ (int)((uint)key >> 16);
return key;
}
上面可以生成32位的hash,是不是?
...全文
223 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

33,010

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧