2013-07-30 42 views
0

当前编写一个程序将十六进制转换为十进制。下面是我的代码:将十六进制转换为十进制得到不正确的结果

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

当我运行我的程序,它告诉我:z = -559035650

然而,当我使用十六进制到十进制转换器测试0xDeadCafe它给我不同的结果,这是3735931646。我可否知道我的代码有问题,并导致我得到不正确的结果?

回答

1

没有什么是错在这里 - int签署类型,并作为你的价值的最高位是1(因为D大于7)你最终得到一个负数。

看到无符号值是使用一个long,而不是最简单的方法:

long z = 0xdeadcafeL; 

注意这里的L,使之成为长文本 - 否则它当作一个int文字和然后转换到long - 再次将其作为负数。

另一种方法是使用整数文字,但掩盖它与0xFFFFFFFFL把它变成一个长期没有使它负:

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

我明白你的意思,我现在已经改变INT长,但它仍然给我签名的价值。我可以知道如何获得无符号值吗? – Ian

+1

@Ian:我已经展示了两种不同的版本 - 或者使用长文字开始,或者用“长32位”设置掩盖它。 –

+0

谢谢。有用。 – Ian

相关问题