public class JoyOfHex {    public static void main(String[] args) {        System.out.println(            Long.toHexString(0x100000000L + 0xcafebabe));    }}
请帮忙看看,这个程序结果为什么不是1cafebabe?谢谢

解决方案 »

  1.   

    有点奇怪,
    0x100000000L + 0xcafebabe 不是转换为 long 吗?我试了,如果改为0x100000000L + 0xcafebabeL,就是1cafebabe了。
      

  2.   

    是转为long,但是0xcafebabe为什么是0xffffffffcafebabeL呢?
      

  3.   

    猜想,可能是这样的
    0xcafebabe = 1100 1010 1111 1110 1011 1010 1011 1110,八字节,是int型,首位是1,是负数。
    转换成long型时,高32位用原int数的最高位填充,以保持符号不变。若是0xcafebabeL,本身就是long型,高32位是0
      

  4.   

    上面写错了0xcafebabe = 1100 1010 1111 1110 1011 1010 1011 1110,是四字节。