0

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

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

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

但是,当我0xDeadCafe使用十六进制到十进制转换器进行测试时,它给了我不同的结果,即3735931646. 我可以知道我的代码有问题并导致我得到不正确的结果吗?

4

1 回答 1

1

这里没有错 -int是有符号类型,并且由于您的值的最高位是 1(因为D大于 7),您最终会得到一个负数。

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

long z = 0xdeadcafeL;

注意L这里使它成为一个长文字 - 否则它被视为int文字然后转换为 a long- 再次将其保留为负数。

另一种方法是使用整数文字但将其屏蔽0xFFFFFFFFL以将其转换为 long 而不会使其为负:

int z = 0xdeadcafe;
long x = z & 0xFFFFFFFFL;
于 2013-07-30T08:35:25.733 回答