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后就避免了符号扩张哈哈。

 

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值