所以我做的哈希碼函數算法算法: 對於每個字符旋轉當前位三位離開 添加的每個字符的值, XOR運算結果當前 下面的代碼我到目前爲止:通過在C哈希碼位運算
unsigned int hash_function(const char *k){
unsigned int current = 0;
unsigned int rot = 0;
int i = 0;
int r = 0;
for(i = 0; i < strlen(k); i++){
for(r = 0; r < 3; r++){
rot = ((rot & 1 (1 << 31)) >> 31 | (rot << 1);
}
rot += k[i];
current ^= rot;
rot = current;
}
return current;
}
一些例子,該算法應該給 「給我」 = 477003, 「避難所」 = 41540041 然而,這種算法不給我正確的結果。我很確定我正在使用正確的旋轉操作,然後按照原樣進行操作。我想知道是否有人能指出我正確的方向。 感謝,並希望我格式化這個問題的正確
我想你的意思是把'腐=((腐&(1 << 31)) >> 31)|(腐<< 1);'但循環是不必要的 - 使用'rot =((rot&(7 << 29)) >> 29)|(rot << 3);'而不是 – 2014-10-27 22:25:04