首页 > 解决方案 > parseUnsignedInt - 这个方法有什么问题?

问题描述

我的脑子要炸了...... java怎么了?

我看到不仅我有误解,所以也许有人会告诉我这个实现的逻辑在哪里。

所以我们有这个代码

    String s = Integer.toBinaryString(-5);
    System.out.println(s);
    int i = Integer.parseInt(s, 2);
    System.out.println(i);

当然我们会遇到异常,因为 parseInt 试图将 1111111111111111111111111111011 解析为 4 294 967 291,当然这超出了范围。但是,为什么parseUnsignedInt解析 11111111111111111111111111111011 到 -5 ???逻辑在哪里?这是未签名的!首先,我希望这个方法会返回 unsigned Int (我知道 java 没有它),但是好吧,让我们试着想象一下parseUnsignedInt它不是关于返回值,而是关于参数,但又一次!如果这是无符号的,那么 11111111111111111111111111111011 应该是正值,而不是-5。请告诉我,有什么意义?因为对我来说,Sun\Oracle 似乎在欺骗开发人员。

PS我只是尝试在C#中重复这个实验

        string s = Convert.ToString(-5, 2);
        Console.WriteLine(s);
        int i = Convert.ToInt32(s,2);
        Console.WriteLine(i);

没问题。我 = -5!正如我所料。还有 Convert.ToUInt32(s,2) 将返回给我 4 294 967 291

更新:伙计们,也许你不理解我。我不是在寻找解决方案。我只是混淆了java核心方法包含“无符号”字但与它无关。当您使用parseUnsignedInt时,您希望该方法会返回无符号数。但是 -5 != 无符号数。

标签: javaunsigned

解决方案


Integer.toBinaryString 转换为二进制补码格式。如果您想获得二进制数字,请使用 Integer.toString( -5, 2) 。但它将由“-”而不是“1”引导。


推荐阅读