簡體   English   中英

parseUnsignedInt - 這個方法有什么問題?

[英]parseUnsignedInt - what's wrong with this method?

我的腦子要炸了……java怎么了?

我看到不僅我有誤解,所以也許有人會告訴我這個實現的邏輯在哪里。

所以我們有這個代碼

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

當然我們會得到異常,因為 parseInt 試圖解析 11111111111111111111111111111011 到 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 != 無符號數。

Integer.toBinaryString 轉換為二進制補碼格式。 如果你想得到二進制數字,請使用 Integer.toString( -5, 2) 。 但它將以“-”而不是“1”開頭。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM