在我的计算机组织课程中,我们分配了一个程序。我被困在一件事上。我将值7FF作为字符串,我需要将其转换为signed int。我可以把它变成unsigned int。我得到值2047.正确的值应该是-1。
现在这就是我所拥有的:
int x = Integer.parseInt("7FF", 16);
我已经尝试用短线投射但没有做任何事情。任何帮助,将不胜感激!谢谢。
编辑:所以我的主要问题是,如何使用十六进制字符串“7FF”生成-1的输出?
答案 0 :(得分:4)
要将十六进制字符串解析为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