`

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解惑》

    十六进制和八进制字面常量的类型默认是`int`,其正负取决于最高位。如果最高位为1,那么这个常量会被解释为负数。例如,`0x80`表示-128,`0x8001`表示-32767。若要表示大于`Integer.MAX_VALUE`的数,需加上`L`后缀...

    Java解惑.doc

    同样,负的十六进制和八进制字面常量需要根据最高位判断其正负。例如,`0x80`是一个负的十六进制整数,因为它在二进制表示中最高位为1,但在转换为`int`时,由于最高位(第32位)为0,所以`0x81`是正数。如果需要...

    Java编程中须注意的细节.pdf

    如果一个十六进制或八进制字面常量的最高位设置了1,则该常量表示为负数。 通过理解并掌握以上提到的Java编程细节,开发者可以更加精确地控制代码逻辑,避免不必要的错误,并写出更加健壮的程序。这不仅有助于减少...

    Java 解惑 (中文)

    负的十六进制与八进制字面常量 Java中的数字字面常量默认为`int`类型,无论采用何种进制表示。特别地,当数值超过`int`的最大范围时,需要显式指定为`long`类型,例如: ```java long num = 2147483648L; // 以...

    JAVA解惑

    #### 负的十六进制与八进制字面常量 在Java中,“数字字面常量”的默认类型是`int`,不论其采用何种进制表示。然而,当尝试表示超出`int`范围的负数时(如`-2147483648`),编译器将抛出错误。为了正确表示大负数,...

    Java解惑word版

    对于十六进制和八进制,最高位为 1 时,字面常量被视为负数。例如,`0x80000001` 在作为 `int` 类型时是负数,而作为 `long` 类型则是正数。 总结来说,Java 在处理数值表达式时需要关注数据类型、精度和溢出问题。...

Global site tag (gtag.js) - Google Analytics