无符号的int64 C ++到Java

时间:2013-03-13 07:45:08

标签: java c++ unsigned-long-long-int

以下代码段是否可以成功转换为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;
}

3 个答案:

答案 0 :(得分:4)

Java中的长篇是64位,但已签名。然而,64位仍然可以让你做任何你想做的事情。所以,是的,我会说你可以将C ++代码转换为Java。

答案 1 :(得分:1)

假设u64uint64_t,正式,不是。 Java没有 能够代表所有值的类型 一个uint64_t。实际上,这取决于你在做什么 与价值观。 Java 具有64位整数类型,和 如果你只是看比特,而不是整数值 (或者如果实际值适合int64_t),那么你可以 只需使用long

当然,整数类型后缀只是L,而不是 ULL,但除此之外(对于您提供的值):

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

应该有效。 Java甚至会允许类似的东西 0x800000000000000L,即使实际值不可以 以long表示。 (结果将是 ngative。)

答案 2 :(得分:-1)

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