-6

以下代码段能否成功转换为 Java?

u64 magic_table[5] = {
  0x1000000010000000ull,
  0x1000000000010000ull,
  0x1000000000000001ull,
  0x0100000001000000ull,
  0x0000000100000001ull
};

u64 test(u64 magic_sum, int index) {
  u64 before = magic_sum & 0x4444444444444444ull;
  u64 after = (magic_sum + magic_table[index]) & 0x4444444444444444ull;
  return after & ~before;
}
4

3 回答 3

4

Java 中的 long 是 64 位的,但有符号。但是,64 位仍然存在,您可以随心所欲地做任何事情。所以是的,我想说您可以将 C++ 代码转换为 Java。

于 2013-03-13T07:50:48.840 回答
1

假设那u64uint64_t,正式地,不。Java 没有能够表示 a 的所有值的类型uint64_t。实际上,这取决于您对这些价值观所做的事情。Java确实有 64 位整数类型,如果您只是查看位,而不是整数值(或者如果实际值适合 a int64_t),那么您可以使用long.

整数类型后缀当然只是L, 而不是 ULL, 否则(对于您给出的值):

long magicTable[] = { 
    0x1000000010000000L,
    0x1000000000010000L,
    0x1000000000000001L,
    0x0100000001000000L,
    0x0000000100000001L
};

应该管用。Java 甚至会允许类似的事情 0x800000000000000L,即使实际值不能用long. (结果将是负数。)

于 2013-03-13T09:32:35.197 回答
-1

如果您没有时间处理语言的差异(C++ 与 Java),只需使用JNI,您就可以轻松高效地在 Java 中运行任何 C/C++ 代码。

于 2013-03-13T07:54:58.183 回答