【发布时间】:2013-09-29 11:09:02
【问题描述】:
我正在用 Java 做一个 pokerHand 评估器,因为我使用的是用 C 实现的 (http://www.suffecool.net/poker/evaluator.html)。我已经“翻译”了代码,它工作得很好而且很快。现在我想添加一些 HashTables 以使其更快,它看起来很简单,如下所述: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 吗? 非常感谢!
【问题讨论】:
-
注意栈溢出不是代码翻译服务,贴出你试过的java代码,做了什么,出了什么问题
-
是的对不起,我不想让你翻译,我想我没有解释清楚。我没有在 Java 中尝试任何奇怪的东西,主要是因为我不知道无符号变量或如何用该语言模拟它们,我只是尝试将 unsigned 替换为 int,并在它不起作用时搜索。无论如何,csoroiu 的回答很完美。
标签: java c bit translate unsigned