Cで実装されたものを使用しているため、JavaでpokerHandエバリュエーターを実行しています(http://www.suffecool.net/poker/evaluator.html)。私はコードを「翻訳」しましたが、かなりうまく速く動作します。ここで説明されているように、いくつかの HashTables を追加して高速化したいと考えてい ます。コードは機能しません。次の関数にあることに気付きました。
unsigned find_fast(unsigned u)
{
unsigned a, b, r;
u += 0xe91aaa35;
u ^= u >> 16;
u += u << 8;
u ^= u >> 4;
b = (u >> 8) & 0x1ff;
a = (u + (u << 2)) >> 19;
r = a ^ hash_adjust[b];
return r;
}
Cで他に何もない「符号なし」は整数だと思いますが、Javaではこの関数はCと同じように生成されず、rは時々負の値になり、意味がありません。私の知る限り、Java には unsigned 演算子のようなものはなく、一部の表現を負の数として理解するのに問題があると思います。そのコードを Java に変換するのを手伝ってくれませんか? どうもありがとう!