Python Expressive Puzzlers 5: The Joy of Hex

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

下面的程式碼會輸出什麼結果?
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))

沒有留言: