3

なぜそれは負に戻るのですか?そして、どうすれば戻り値を正にすることができますか?

KeyInput:ABCD123

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

return key;
4

2 に答える 2

2

'key' を ' ' などの符号なし型にしunsigned intます。

負になる理由は、符号付きの型の場合、上位ビットが符号を示すためです。ハッシュが 0x7FFFFFFF よりも大きくなると、符号ビットが「1」になり、値が負になります。符号なし型は符号ビットを使用しません。大きすぎる値は引き続き正のままです。

于 2013-02-13T04:47:45.817 に答える
1

keyunsigned long integer として宣言するとうまくいきます。

于 2013-02-13T04:47:28.020 に答える