黑马程序员技术交流社区

标题: 十六进制 [打印本页]

作者: 郭沐昌    时间: 2013-4-4 19:42
标题: 十六进制
本帖最后由 郭沐昌 于 2013-4-6 20:27 编辑
  1. public class JoyOfHex{

  2. public static void main(String[] args){


  3. System.out.println(



  4. Long.toHexString(0x100000000L + 0xcafebabe));

  5. }
  6. }
复制代码
该程序使用的是 long 型运算,它可以支持 16位十六进制数,因此运算溢出是不可能的。  
然而,如果你运行该程序,你就会发现它打印出来的是 cafebabe,并没有任何前导的 1。这个输出表示的是正确结果的低 32 位,但是不知何故,第 33 位丢失了。


作者: 刘胜寒    时间: 2013-4-4 20:14
等着高手在解答啊!!!
作者: 丁一    时间: 2013-4-5 10:36
System.out.println(Long.toHexString(0xcafebabeL));
System.out.println(Long.toHexString(0xcafebabe));
System.out.println(Long.toHexString(0x100000000L + 0xcafebabe));
System.out.println(Long.toHexString(0x100000000L + 0xcafebabeL));

0xcafebabeL 和0xcafebabe 是不同的值

上面的输出为   
cafebabe   
ffffffffcafebabe  
cafebabe     
1cafebabe   

就是这个原因
作者: 黄玉昆    时间: 2013-4-6 18:47
如果问题未解决,请继续追问,如果没有问题了,请将帖子分类 改为“已解决”,谢谢




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2