下面的程式碼會輸出什麼結果?
1 2 3 4 5 | public class JoyOfHex { public static void main(String[] args) { System.out.println(Long.toHexString(0x100000000L + 0xcafebabe)); } } |
答案當然不會是1cafebabe。這是因為 0xcafebabe 會被擴展成 0x100000000L 的 long 型別,也就是從 int 變成 long。那這會讓 0xcafebabe 變成 0xffffffff cafebabeL ,原因是因為 0xcafebabe 的最高位元為1,當十六進制與八進制的最高位元為1時,Java會當成是負數來處理,也就是一直補1到左邊的高位元裡。而 0x100000000L + 0xcafebabe 就會變成
0x00000001 00000000L
+ 0xffffffff cafebabeL
運算結果為 0xcafebabe 。只要將 0xcafebabe 補上L變成 0xcafebabeL 就可以避免這個問題。
那Python呢?
print(hex(0x100000000L + 0xcafebabe))
沒有留言:
張貼留言