将十六进制转换为十进制会得到不正确的结果

时间:2013-07-30 08:33:03

标签: hex

目前编写一个程序将十六进制转换为十进制。以下是我的代码:

 public  class HexTest {
    public static void main (String [] args) {
         int z = 0xDeadCafe;
         System.out.println("z = " + z);
       }
    }

当我运行我的程序时,它会显示:z = -559035650

然而,当我使用十六进制到十进制转换器测试0xDeadCafe时,它给出了不同的结果3735931646。我可以知道我的代码有问题并导致我得到错误的结果吗?

1 个答案:

答案 0 :(得分:1)

这里没有错 - int签名的类型,并且您的值的最高位是1(因为D大于7你得到一个负数。

查看无符号值的最简单方法是使用long代替:

long z = 0xdeadcafeL;

请注意L此处使其成为长文字 - 否则将其视为int字面值,然后转换为long - 再次将其留为负数。

另一种方法是使用整数文字,但用0xFFFFFFFFL将其掩盖,将其变为长整数而不使其为负数:

int z = 0xdeadcafe;
long x = z & 0xFFFFFFFFL;