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.
なぜそれは負に戻るのですか?そして、どうすれば戻り値を正にすることができますか?
KeyInput:ABCD123
for(int a=0; a<keyInput.length(); a++){ key = ((key << 5)+key)^keyInput[a]; } return key;
'key' を ' ' などの符号なし型にしunsigned intます。
unsigned int
負になる理由は、符号付きの型の場合、上位ビットが符号を示すためです。ハッシュが 0x7FFFFFFF よりも大きくなると、符号ビットが「1」になり、値が負になります。符号なし型は符号ビットを使用しません。大きすぎる値は引き続き正のままです。
keyunsigned long integer として宣言するとうまくいきます。
key