Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
为什么返回负数?以及如何使返回值变为正值?
键盘输入:ABCD123
for(int a=0; a<keyInput.length(); a++){ key = ((key << 5)+key)^keyInput[a]; } return key;
将 'key' 设为无符号类型,例如 ' unsigned int'。
unsigned int
它变为负数的原因是因为对于有符号类型,高位表示符号。一旦哈希值大于 0x7FFFFFFF,符号位变为“1”并且值变为负数。无符号类型不使用符号位。太大的值继续保持积极。
声明key为无符号长整数应该可以解决问题。
key