2012-11-02 33 views
2

在CLRS的第264頁的底部,作者說在獲得r0 = 17612864之後,r0的14個最高有效位產生散列值h(k)= 67。我不明白爲什麼它給出了67,因爲67以二進制是1000011這是7位。爲什麼17612864的14個最重要的位是67?

EDIT 在教科書: 作爲一個例子,假設我們有K = 123456,P = 14,M = 2^14 = 16384,以及w = 32適應Knuth的建議,我們選擇A是(\ sqrt(5) - 1)/ 2最接近的形式s/2^32的分數,因此A = 2654435769/2^32。那麼k * s = 327706022297664 =(76300 * 2^32)+ 17612864,因此r1 = 76300且r0 = 17612864.r0的14個最高有效位產生值h(k)= 67。

+2

我不知道怎麼會可能是,但包括這裏更多的上下文而不是書上的頁碼可能有助於找到能夠回答你問題的人。 –

+0

查看圖11.4(在頁面頂部的264),'w'是32,你從32位數字的左邊(最高位)提取'p'(14)位。 – Esailija

+0

謝謝!現在我可以理解這個數字。 – zxia31

回答

6

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 
+0

我沒有考慮機器字的大小。事實上,作者在此之前提到,假設機器的字大小是w位,並且k適合單個字。我沒有完全理解它的意思。 – zxia31

2

在32位世界

17612864 = 00000001 00001100 11000000 01000000(二進制)

頂部14位= 00000001 000011 = 67

+0

是的!作者提到機器是w(w = 32這裏)位。 – zxia31

相關問題