[問題] 關於shift溢位的小問題

看板C_and_CPP作者 (菸酒生)時間15年前 (2011/01/14 18:22), 編輯推噓2(207)
留言9則, 3人參與, 最新討論串1/1
餵入的資料(Input): name = "Mindale" 程式碼(Code):(請善用置底文網頁, 記得排版) for(i=0;i<strlen(name);i++) result=(result<<5)^name[i]; result=result%9733; 補充說明(Supplement): 我使用這hashing function 去做動態雜湊。當輸入名字的字串長度比較長的時候, 跑到一半就會當掉,如果把shift的值改比較小(5改成2)。稍微長一點的字串就可以 解決。照理說溢位的時候也不會當掉吧@@ 想請問鄉民這是甚麼原因? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.231.66.141

01/14 18:40, , 1F
我怎麼覺得問題不在這...反而像是字串存取超出陣列範圍
01/14 18:40, 1F

01/14 18:41, , 2F
你確定問題出在這裡嗎?
01/14 18:41, 2F

01/14 18:49, , 3F
我只要將其中(result<<5)改成(result<<2)就可以跑了
01/14 18:49, 3F

01/14 18:50, , 4F
所以才這樣問 另外問一下 溢位的bit值怎麼補接到尾巴去?
01/14 18:50, 4F

01/14 18:52, , 5F
假如我一直將 result=10 重複(result<<5)很多次
01/14 18:52, 5F
※ 編輯: Mindale 來自: 61.231.66.141 (01/14 18:53)

01/14 18:53, , 6F
值就變成0了
01/14 18:53, 6F

01/14 20:09, , 7F
你要不要把迴圈每一圈裡面的變數都印出來 不要用猜的
01/14 20:09, 7F

01/14 21:49, , 8F
我找到原因了 是result=result%9733 我的result是矩陣的
01/14 21:49, 8F

01/14 21:49, , 9F
index 所以才會這樣
01/14 21:49, 9F
文章代碼(AID): #1DC2FElg (C_and_CPP)