2017-07-24 229 views
1

javadoc我知道默認情況下,Java的int數據類型是一個32位有符號的二進制補碼整數,其最小值爲-2^31,而a最大值爲2^31-1。Integer.parseInt() - 有符號和無符號數

如果是這樣的話,爲什麼這樣的:

System.out.println(Integer.parseInt("1111", 2)); 

產生15,而不是-1(2的補數籤)的值。

+2

您告訴它將其解析爲二進制數。 1111是15的十進制表示法 – Carcigenicate

+4

目前還不清楚你爲什麼會產生-1作爲輸出 – UnholySheep

+0

也許你的意思是'System.out.println(Integer.parseInt(「11111111111111111111111111111111」,2));'' –

回答

5

你做了一個假設,即,因爲整數使用兩個互補,Integer.parseInt與2(二進制)基數內部表示還需要數以這種形式。這個假設是不正確的。

像這樣的東西最好的選擇是read the documentation。沒有提到兩個補碼。但它確實說:

的第一個字符是ASCII字符的減號「 - 」(「\ u002D」)爲給 表示負值

所以,如果你想分析值表示使用二進制補碼,你將不得不編寫一個函數將二進制數轉換爲絕對值,然後在必要時追加一個減號。

1

根據java.lang.Integer類的paramInt(String s,int radix)的javadoc做如下操作;

將字符串參數解析爲指定基數 中第二個參數的有符號整數。字符串中的字符必須全部爲指定基數的 數字。

當您運行;

System.out.println(Integer.parseInt("1111", 2)); 

你告訴採取「1111」作爲一個字符串,並將其與2(你的基數)的基礎轉換爲int值的方法,最終將其總計爲15二進制。

相關問題