2017-06-18 15 views
1
public static int reverseIntBitwise(int value) { 
    String res = String.format("%32s", 
    Integer.toBinaryString(value)).replace(' ', '0'); 

    char[] charArray = res.toCharArray(); 
    for(int i=0; i<charArray.length; i++){ 
     if(charArray[i] == '0'){ 
      charArray[i]='1'; 
     }else if(charArray[i]=='1'){ 
      charArray[i]='0'; 
     } 
    } 
    String res2 = new String(charArray); 
    return Integer.parseInt(res2, 2); 
} 

だから、解像度の= 00000000000000000000000000101110 とRES2 = 111111111111111111111111110100010と1 JAVA 2進数から10進数への変換とめくる

が、私はこれがコンソールに表示されるintに戻ってそれを変換しようとすると:

Exception in thread "main" java.lang.NumberFormatException: For input string: "11111111111111111111111111010001" 
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) 
    at java.lang.Integer.parseInt(Integer.java:583) 
    at com.company.Main.reverseIntBitwise(Main.java:169) 
    at com.company.Main.main(Main.java:150) 

誰でも解決できますか? ありがとう

答えて

3

結果番号4294967249Integer(つまりInteger.MAX_VALUEより大きい)の範囲外であるため、NumberFormatExceptionが表示されています。あなたは、例えば、代わりにBigIntegerを試すことができます。:

String res2 = "11111111111111111111111111010001"; 
System.out.println(new BigInteger(res2, 2)); 
+0

や 'Long.parseLong()' – Eran

+0

@Eranはい、絶対に! –

0

バイナリ11111111111111111111111111010001の10進数は整数データ型をオーバーフローします。

長い文字を使用してください。

関連する問題