在 CLRS 的第 264 页底部,作者说在获得 r0 = 17612864
后,r0
的 14 个最高有效位产生哈希值 h (k) = 67
。我不明白为什么它给出 67,因为 67 在二进制中是 1000011
,即 7 位。
编辑
在课本中:
例如,假设我们有 k = 123456、p = 14、m = 2^14 = 16384 和 w = 32
。采纳 Knuth 的建议,我们选择 A 为 s/2^32
形式中最接近 (\sqrt(5) - 1)/2
的分数,因此A = 2654435769/2^32
。然后 k*s = 327706022297664 = (76300 * 2^32) + 17612864
,所以 r1 = 76300 和 r0 = 17612864
。 r0
的 14 个最高有效位产生值 h(k)=67
。
最佳答案
17612864
= 0x010CC040
=
0000 0001 0000 1100 1100 0000 0100 0000
其中的最高 14 位是
0000 0001 0000 11
也就是0x43
,也就是67
还有:
int32 input = 17612864;
int32 output = input >> (32-14); //67
关于algorithm - 为什么17612864的高14位是67?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13188468/