在我的计算机组织课程中,我们分配了一个程序。我陷入一件事。我将值7FF作为字符串,需要将其转换为带符号的int。我可以将它传递给一个未签名的int。我得到的值为2047。正确的值应为-1。

现在这就是我所拥有的:

int x = Integer.parseInt("7FF", 16);


我尝试用短片铸造它,但是什么也没做。任何帮助,将不胜感激!谢谢。

编辑:所以我的主要问题是,如何生成十六进制字符串“ 7FF”的-1输出?

最佳答案

要将十六进制字符串解析为11位带符号的值,可以使用以下方法。

该算法取自Sean Eron Anderson的Bit Twiddling Hacks

public static int parseElevenBits(String hex) {
    return Integer.parseInt(hex, 16) << 21 >> 21;
}


测试

System.out.println(parseElevenBits("400"));
System.out.println(parseElevenBits("401"));
System.out.println(parseElevenBits("7FE"));
System.out.println(parseElevenBits("7FF"));
System.out.println(parseElevenBits("0"));
System.out.println(parseElevenBits("1"));
System.out.println(parseElevenBits("3FE"));
System.out.println(parseElevenBits("3FF"));


输出量

-1024
-1023
-2
-1
0
1
1022
1023

09-19 22:55