首页 > 其他 > 详细

十六进制的趣事

时间:2015-03-27 08:44:41      阅读:193      评论:0      收藏:0      [点我收藏+]

阅读下述代码:

import java.util.*;
public class Fifth{
        public static void main(String[] args){
                System.out.println(Long.toHexString(0x100000000L + 0xcafebabe));
        }
}

输出什么?是1cafebabe吗?

如果你回答是,那就错了?

该是什么呢?

cafebabe

探究:

1、十进制字面常量具有一个很好的属性,即所有的十进制字面常量都是正的,而十六进制和八进制就没有这个属性了。观察一下0xcafebabe是正数还是负数?

2、混合类型计算。int会向long进行扩展,而这里的扩展还要注意符号扩展,由于0xcafebabe是负数,因此变成long型是0xffffffffcafebabe,之后与0x100000000L相加

最终结果会是cafebabe

修正程序

import java.util.*;
public class Fifth{
        public static void main(String[] args){
                System.out.println(Long.toHexString(0x100000000L + 0xcafebabeL));
        }
}
//尽量避免混合类型的计算

十六进制的趣事

原文:http://www.cnblogs.com/qionghua520/p/4370788.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!