0

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 に変換するのを手伝ってくれませんか? どうもありがとう!

4

1 に答える 1

2

unsignedに変更しint>>シフト演算子をJavaの>>>符号なしシフト演算子に変更してみてください。

unsignedこれは、タイプが 32 ビット長の場合に有効です。

Java ではすべての数値プリミティブが署名されていますが、ヒントを使用すると、メソッドはCバージョンと同様に機能するはずです。

于 2013-09-24T09:57:09.470 に答える