问题是我无法获取这个十六进制数的 int 值并将其以十六进制形式放在那里。 但是,如果我将其转换为十进制值,则从“0x8000_0000”开始的所有值都不会解析为 int,因为这些值超出了 int。如果我解析 Long,则会获得无符号的巨大数字,而我不需要这样的数字 - 我需要 int 范围内的有符号数字。
我尝试这样做,我认为这是正确的,因为我检查的一些示例都是正确的,但作业的测试表明它不正确。但我没有看到错误出现的数字。
long b = Long.parseLong("ffffffff", 16); System.out.println((int) (Integer.MIN_VALUE + (b - Integer.MAX_VALUE - 1)));
我还在互联网上看到,您可以通过位移来尝试某种方式,但我没有发现该信息对我的任务有任何用处。
那么所有从“0x8000_0000”开始的值都不会被解析为int
因为
0x8000_0000
是Integer.MAX_VALUE + 1
。显然,超过最大可能的 1
的 int
无法存储在 int
中。如果您需要支持任意值,请使用BigInteger
。
String s = "0x8000_0000";
BigInteger bi = new BigInteger(s.substring(2).replaceAll("_", ""), 16);
System.out.println(bi.subtract(BigInteger.valueOf(Integer.MAX_VALUE)));
输出
1