我会说像这样的事情:
uint32_t hash(uint64_t x)
{
x >>= 3;
return (x ^ (x>>10) ^ (x>>20)) & 0x3FF;
}
Run Code Online (Sandbox Code Playgroud)
最重要的3位不是很有用,因为大多数变量是4字节或8字节对齐,所以我们删除它们.然后我们采用接下来的30位并将它们混合在一起(XOR),每块10位.
当然,你也可以参加,(x>>30)^(x>>40)^(x>>50)但我不确定他们是否会在练习中有所作为.