java解惑之—十六进制的字面常量。

先来看一个小程序:

public class JoyOfHex{

     public static void main(Sting[ ] args){

          System.out.println(

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

     }

}

初看这个小程序的结果应该是:1cafebabe;但是并不是我们想象的那样。这个问题设计到了十进制和十六进制以及八进制数

在JAVA中字面常量的属性问题。对于十进制数,JAVA中如果不显示的在前面加负号,那么就是正数,但是对与十六进制和八进制数,如果最高位被置位的话,那么就表示一个负数了。现在该明白了吧o(∩_∩)o...对于上面的例子0xcafebabe代表的数值是

-889275714,注意到左边的数值是Long类型的(它是八个字节,那么最多可以容纳64位,也就是16位十六进制数,所以不用考虑溢出),所以对于右边的int型的变量要提升为Long型的,结果为0xffffffffcafebabe;

注意:如果在0xcafebabe改为0xcafebabeL那么结果就是正确的,因为加是L后就避免了符号扩张哈哈。

 

今天又学到了一点点小知识。。记录一下哈哈。。

 

你可能感兴趣的:(java,.net,asp.net,asp)