2017-06-18 3 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); 
} 

So = res 00000000000000000000000000101110 Und res2 = 11111111111111111111111111010001binäre Konvertierung 0 und 1 JAVA in Dezimalzahlen und Spiegel

aber wenn ich versuche, es zu konvertieren zurück in der Konsole angezeigt int ist dies:

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) 

Kann mir jemand bei der Lösung helfen? Danke

Antwort

3

Sie erhalten NumberFormatException da die resultierende Zahl 4294967249 außerhalb des Bereichs von Integer ist (das heißt mehr als Integer.MAX_VALUE). Sie können versuchen, BigInteger statt, z.B .:

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

Oder 'Long.parseLong()' – Eran

+0

@Eran ja, absolut! –

0

Die Dezimalzahl für Binär 11111111111111111111111111010001 würde den Integer-Datentyp überlaufen.

Verwenden Sie eine lange.