2010-09-01 244 views
1
return jjMoveStringLiteralDfa1_0(0x140L, 0x4000000000000L); 

我嘗試將0x4000000000000L hexa轉換爲二進制和文本,但我得到奇怪的字符。這是十六進制值嗎?十六進制值

+0

你在用什麼語言?你應該爲你的語言添加一個標籤。 – 2010-09-01 10:46:42

回答

2

0x4000000000000是一個十六進制數字,L最後告訴你它是一個long整數(在這種情況下,我猜測一個8字節的整數)。

1

0x前綴是幾種語言的標準。它表示一個十六進制數字的開始。後綴L表示多種語言(例如C)的長值。

如果重組它,它很容易看出它的價值:

4 0000 0000 0000 

這相當於:

0004 0000 0000 0000 

每一組是兩個字節,所以總長度爲8個字節。

兩個最重要的字節(左邊的)是0004,它是二進制的0000 0000 0000 0100。換句話說,該值只有第51位的設置(它從右邊算起,即所謂的最低有效位),所有其他位都被清除。看起來像一個掩碼(一個標誌)。爲了完整起見,這裏是二進制表示:

0000 0000 0000 0100 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 

每個空格分隔的組是一個半字節,每四個組等於兩個字節。

所以這個數字是一個完全合法的64位值。但是,也許你把價值與代表角色混爲一談?因爲它當然不是,它在Unicode範圍之外(最高可達0x10FFF IIRC)。

順便說一句,轉換爲十進制的數字是1.125.899.906.842.620,所有這些都是一個體面的計算器應該能夠向你展示的(例如,Mac OS X中的Apple計算器在設置爲編程器模式時做得很好,例如)。