在CLRS第264页的底部,作者说在获得r0 = 17612864
后,r0
的14个最高有效位产生了哈希值h(k) = 67
。我不明白为什么它给出了67,因为二进制中的67是1000011
,这是7位。
修改
在教科书中:
例如,假设我们有k = 123456, p = 14, m = 2^14 = 16384, and w = 32
。根据Knuth的建议,我们选择A作为最接近s/2^32
的{{1}}形式的分数,以便(\sqrt(5) - 1) / 2
。然后A = 2654435769/2^32
,以及k*s = 327706022297664 = (76300 * 2^32) + 17612864
。 r1 = 76300 and r0 = 17612864
的14个最高有效位产生值r0
。
答案 0 :(得分:8)
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
答案 1 :(得分:2)
在32位世界中
17612864 = 00000001 00001100 11000000 01000000(二进制)
前14位= 00000001 000011 = 67