2013-03-13 91 views
-6

以下代碼片段是否可以成功轉換爲Java?Unsigned int64 C++到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; 
} 
+2

總之:是的。實際上,我們不會「轉換代碼」,或者爲您編寫代碼。請嘗試一下,發佈您的Java代碼,然後我們會盡力爲您提供幫助。 – 2013-03-13 07:46:36

+0

我認爲你的問題的解決方案是諮詢一個基本的[Java教程](http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html)。 – ChiefTwoPencils 2013-03-13 07:49:35

回答

3

Java中的一個長度是64位,但是是有符號的。然而,64位仍然在那裏讓你做任何你想做的事情。所以是的,我會說你可以將C++代碼轉換爲Java。

+0

我試過這種方法使用很長,但結果只是一個巨大的數字,而不是有一個數字與其位設置。 – 2013-03-13 08:48:01

+0

@ Ivan-MarkDebono你是什麼意思「只是一個龐大的數字」。 '0x1000000010000000ULL' _is是一個巨大的數字。 – 2013-03-13 09:33:28

+0

這取決於他是否需要考慮實際值。 (因爲他使用十六進制,他可能不會,但你永遠不知道。)並不是所有'uint64_t'中的值都可以用Java'long'表示。 – 2013-03-13 09:34:57

-1

如果您沒有時間處理語言差異(C++與Java),只需使用JNI即可輕鬆高效地在Java中運行任何C/C++代碼。

0

假設u64uint64_t,正式沒有。 Java沒有 類型,它能夠表示所有 a uint64_t的值。實際上,這取決於你在做什麼 與值。 Java的確實有一個64位的整數類型, 如果你只是看位,而不是積分值 (或者如果實際值將適合在int64_t),那麼你可以 只使用long

的整數類型的後綴也只是L,當然,並沒有 ULL,否則(你給的值):

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

應該工作。 Java甚至會允許 0x800000000000000L之類的內容,即使long中表示的實際值不能爲 。 (由此產生的的值將爲 )。