parseUnsignedInt-此方法有什么问题?

时间:2018-12-06 02:38:51

标签: java unsigned

我的头脑快要炸了……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!=无符号数字。

1 个答案:

答案 0 :(得分:0)

Integer.toBinaryString转换为二进制补码格式。 如果要获取二进制数字,请使用Integer.toString(-5,2)。但是它将以“-”而不是“ 1”开头。