目前编写一个程序将十六进制转换为十进制。以下是我的代码:
public class HexTest {
public static void main (String [] args) {
int z = 0xDeadCafe;
System.out.println("z = " + z);
}
}
当我运行我的程序时,它会显示:z = -559035650
然而,当我使用十六进制到十进制转换器测试0xDeadCafe
时,它给出了不同的结果3735931646
。我可以知道我的代码有问题并导致我得到错误的结果吗?
答案 0 :(得分:1)
这里没有错 - int
是签名的类型,并且您的值的最高位是1(因为D
大于7你得到一个负数。
查看无符号值的最简单方法是使用long
代替:
long z = 0xdeadcafeL;
请注意L
此处使其成为长文字 - 否则将其视为int
字面值,然后转换为long
- 再次将其留为负数。
另一种方法是使用整数文字,但用0xFFFFFFFFL
将其掩盖,将其变为长整数而不使其为负数:
int z = 0xdeadcafe;
long x = z & 0xFFFFFFFFL;