二進位制字串轉化為十進位制數字
阿新 • • 發佈:2019-02-18
Integer預設為32位儲存空間,parseInt轉換時保留符號位(也就是需要顯式的輸入"-"去表示負數),則剩下31位,最大表示的16進位制數字為7FFF FFFF,8000 0000 的二進位制為1000 0000 0000 0000 0000 0000 0000 000,不符合轉換規則 因此,16進製表示integer範圍就是 ±7FFF FFFF,你輸入的數字被視為﹢8000 0000,超出範圍,丟擲NumberFormatException,不冤枉
原來是parseInt這個函式自己在轉化的時候轉化的範圍並不是我們以為的那樣,比如轉化為int但是輸入引數範圍並不能是int的最大值。
為此做了一個測試
int f = -2147483648;
System.out
System.out.println(Integer.parseInt(Integer.toBinaryString(f),2));
結果為
10000000000000000000000000000000
Exception in thread "main" java.lang.NumberFormatException: For input string: "10000000000000000000000000000000"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
at java.lang.Integer.parseInt(Integer.java:461
at NumberTest.main(NumberTest.java:91)
可見這是parseInt這個函式的問題,所以只好用更大的資料型別long來進行轉化了