1. 程式人生 > >二進位制字串轉化為十進位制數字

二進位制字串轉化為十進位制數字

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

.println(Integer.toBinaryString(f));

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來進行轉化了