誰もが知っているように、Java には unsigned 型がありません。C# (uint を使用) のスニペットを Java に変換する必要があります。ここに私のコード:
private const int ROLLING_WINDOW = 7;
private const int HASH_PRIME = 0x01000193;
private unit h1, h2, h3, n;
private byte[] window;
//...
private uint roll_hash(byte c)
{
h2 -= h1;
h2 += (uint)ROLLING_WINDOW * c;
h1 += c;
h1 -= window[n % ROLLING_WINDOW];
window[n % ROLLING_WINDOW] = c;
n++;
h3 = (h3 << 5);
h3 ^= c;
return h1 + h2 + h3;
}
private static uint sum_hash(byte c, uint h)
{
h *= HASH_PRIME;
h ^= c;
return h;
}
Javalong
では代わりに使用しますuint
が、結果が負の値になることがあります。解決策は、署名されていない演算子を使用しています。いくつかの検索では 0xFFFFFFFFL について表示されますが、締め切りが迫っている間は非常に複雑です。この問題で誰かが私を助けてくれることを願っています。ありがとう