解惑五:十六进制的趣事

解惑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