为什么它会返回负数?如何使返回值为正?
KeyInput:ABCD123
for(int a=0; a<keyInput.length(); a++){
key = ((key << 5)+key)^keyInput[a];
}
return key;
答案 0 :(得分:2)
将'key'设为无符号类型,例如“unsigned int
”。
它变为负数的原因是因为对于有符号类型,高位表示符号。一旦哈希值大于0x7FFFFFFF,符号位变为“1”,值变为负值。无符号类型不使用符号位。太大的价值继续保持正值。
答案 1 :(得分:1)
将key
声明为无符号长整数应该可以解决问题。