哈希返回负值

时间:2013-02-13 04:46:00

标签: c++ hash

为什么它会返回负数?如何使返回值为正?

KeyInput:ABCD123

for(int a=0; a<keyInput.length(); a++){
        key = ((key << 5)+key)^keyInput[a];
    }

return key;

2 个答案:

答案 0 :(得分:2)

将'key'设为无符号类型,例如“unsigned int”。

它变为负数的原因是因为对于有符号类型,高位表示符号。一旦哈希值大于0x7FFFFFFF,符号位变为“1”,值变为负值。无符号类型不使用符号位。太大的价值继续保持正值。

答案 1 :(得分:1)

key声明为无符号长整数应该可以解决问题。