解惑五:十六进制的趣事
解惑5:十六进制的趣事
[声明]所有代码均来自Joshua Bloch和Neal Gafter所著的<Java解惑>一书,本人仅因学习需要摘抄和注释,感谢二位作者的知识分享.
代码:
public class JoyOfHex { public static void main(String[] args) { System.out.println(Long.toHexString(0x100000000L + 0xcafebabe)); } }
结果:
cafebabe
分析:
十进制的字面量只有正值,通过前置正负号来表示正负,但是八进制或者十六进制只能通过最高位来表示正负,最高位为1时表示负数.
本题中是long型数据+int型数据,所以int型数据会被扩展至long型.
int型的0xcafebabe最高位进行扩展,0xffffffffcafebabe
运算:
0x0000000100000000L
+ 0xf f f f f f f f cafebabeL
结果: 0x00000000 cafebabeL
解决方案代码:
public class JoyOfHex { public static void main(String[] args) { System.out.println(Long.toHexString(0x100000000L + 0xcafebabeL)); } }
结果:
1cafebabe