C++ 散列返回负值

C++ 散列返回负值,c++,hash,C++,Hash,为什么它返回负数?如何使返回值为正值 按键输入:ABCD123 for(int a=0; a<keyInput.length(); a++){ key = ((key << 5)+key)^keyInput[a]; } return key; for(int a=0;a将键声明为无符号长整数就可以了。将“key”设为无符号类型,例如“无符号int” 它变为负数的原因是,对于有符号类型,高位表示符号。一旦散列大于0x7FFFFFFF,符号位变为“1”,

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

按键输入:ABCD123

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

return key;

for(int a=0;a将
声明为无符号长整数就可以了。

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


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

如chris所说,键是有符号类型吗?可能是个坏主意。如果它被设置为负值…当你操作位时,你不想让顶端的位有特殊意义
无符号int