以下代码段是否可以成功转换为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;
}
答案 0 :(得分:4)
Java中的长篇是64位,但已签名。然而,64位仍然可以让你做任何你想做的事情。所以,是的,我会说你可以将C ++代码转换为Java。
答案 1 :(得分:1)
假设u64
是uint64_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 ++代码。