從javadoc我知道默認情況下,Java的int數據類型是一個32位有符號的二進制補碼整數,其最小值爲-2^31,而a最大值爲2^31-1。Integer.parseInt() - 有符號和無符號數
如果是這樣的話,爲什麼這樣的:
System.out.println(Integer.parseInt("1111", 2));
產生15,而不是-1(2的補數籤)的值。
從javadoc我知道默認情況下,Java的int數據類型是一個32位有符號的二進制補碼整數,其最小值爲-2^31,而a最大值爲2^31-1。Integer.parseInt() - 有符號和無符號數
如果是這樣的話,爲什麼這樣的:
System.out.println(Integer.parseInt("1111", 2));
產生15,而不是-1(2的補數籤)的值。
你做了一個假設,即,因爲整數使用兩個互補,Integer.parseInt
與2(二進制)基數內部表示還需要數以這種形式。這個假設是不正確的。
像這樣的東西最好的選擇是read the documentation。沒有提到兩個補碼。但它確實說:
的第一個字符是ASCII字符的減號「 - 」(「\ u002D」)爲給 表示負值
所以,如果你想分析值表示使用二進制補碼,你將不得不編寫一個函數將二進制數轉換爲絕對值,然後在必要時追加一個減號。
根據java.lang.Integer類的paramInt(String s,int radix)的javadoc做如下操作;
將字符串參數解析爲指定基數 中第二個參數的有符號整數。字符串中的字符必須全部爲指定基數的 數字。
當您運行;
System.out.println(Integer.parseInt("1111", 2));
你告訴採取「1111」作爲一個字符串,並將其與2(你的基數)的基礎轉換爲int值的方法,最終將其總計爲15二進制。
您告訴它將其解析爲二進制數。 1111是15的十進制表示法 – Carcigenicate
目前還不清楚你爲什麼會產生-1作爲輸出 – UnholySheep
也許你的意思是'System.out.println(Integer.parseInt(「11111111111111111111111111111111」,2));'' –