A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 郭沐昌 中级黑马   /  2013-4-4 19:42  /  1181 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 郭沐昌 于 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 位丢失了。

评分

参与人数 1技术分 +1 收起 理由
张熙韬 + 1

查看全部评分

3 个回复

倒序浏览
等着高手在解答啊!!!
回复 使用道具 举报
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   

就是这个原因

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
如果问题未解决,请继续追问,如果没有问题了,请将帖子分类 改为“已解决”,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马