C++ 散列返回负值
为什么它返回负数?如何使返回值为正值 按键输入:ABCD123C++ 散列返回负值,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”,
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
键