0

我正在用 Java 做一个 pokerHand 评估器,因为我正在使用一个用 C (http://www.suffecool.net/poker/evaluator.html)实现的评估器。我已经“翻译”了代码,它工作得很好而且很快。现在我想添加一些哈希表以使其更快,它看起来很简单,如下所述:http: //www.paulsenzee.com/2006/06/some-perfect-hash.html 但最终结果是代码不起作用,我意识到这是在以下函数中:

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 中没有像无符号运算符这样的东西,我认为这会导致将某些表示理解为负数的问题。有人可以帮我将该代码翻译成 Java 吗?非常感谢!

4

1 回答 1

2

try changing unsigned to int and >> shift operator to java's >>> unsigned shift operator.

this should be valid if your unsigned type is 32 bits long.

in java all number primitives are signed, but using the hint, your method should work similar to C version.

于 2013-09-24T09:57:09.470 回答