我的头脑快要炸了……java怎么了?
我看到不仅我有误解,所以也许有人会告诉我此实现的逻辑在哪里。
所以我们有这个代码
supereq
当然,我们会得到异常,因为parseInt试图将11111111111111111111111111111011解析为4 294 967 291,当然这超出了范围。但是,为什么 parseUnsignedInt 将11111111111111111111111111111011解析为-5?逻辑在哪里?这是未签名的!首先,我期望这个方法将返回我的unsigned Int(我知道java没有它),但是,好的,让我们试想一下 parseUnsignedInt 与返回值无关,它是关于参数,但再次!如果未签名,则11111111111111111111111111111011应该为正值,而不是 -5 。请告诉我,有什么意义?因为对我来说,Sun \ Oracle似乎正在吸引开发人员。
P.S。我只是想用C#重复此实验
String s = Integer.toBinaryString(-5);
System.out.println(s);
int i = Integer.parseInt(s, 2);
System.out.println(i);
,没问题。我= -5!如我所料。并且Convert.ToUInt32(s,2)也会返回4 429 967 291
更新:伙计们,也许您不了解我。我不是在寻找解决方案。我只是感到困惑,java核心方法包含“ unsigned”字样,但与此无关。当您使用 parseUnsignedInt 时,您希望该方法将返回您的未签名数字。但是-5!=无符号数字。
答案 0 :(得分:0)
Integer.toBinaryString转换为二进制补码格式。 如果要获取二进制数字,请使用Integer.toString(-5,2)。但是它将以“-”而不是“ 1”开头。