十六进制的趣事

阅读下述代码:

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));
        }
}
//尽量避免混合类型的计算

posted on 2015-03-27 08:30  琼华  阅读(173)  评论(0编辑  收藏  举报

导航