java: binäre Zeichenfolge in int konvertieren

8

Ich versuche, ein paar Binärzeichenfolgen wieder in int umzuwandeln. Es konvertiert jedoch nicht alle meine binären Zeichenfolgen und hinterlässt eine java.lang.NumberFormatException Ausnahme. Hier ist mein Testcode mit 3 Binärzeichenfolgen:

%Vor%

Wenn ich die "1010" umwandle, funktioniert es großartig, aber wenn ich versuche, eines der beiden anderen zu konvertieren, bekomme ich die Ausnahme. Kann mir jemand erklären, warum das so ist?

Prost

    
Jeanluca Scaljeri 14.02.2013, 20:25
quelle

3 Antworten

4

Von Ссылка : der toBinaryString() method konvertiert seine Eingabe in die binäre Darstellung des " vorzeichenlosen ganzzahligen Werts ist das Argument plus 2 32 , wenn das Argument negativ ist ".

Von Ссылка : Die Methode parseInt() löst NumberFormatException aus, wenn " Der von der Zeichenfolge dargestellte Wert ist kein Wert vom Typ int ".

Beachten Sie, dass sowohl ~0 als auch ~1 negativ sind (-1 bzw. -2) und daher in die binären Darstellungen von 2 32 -1 und 2 32 umgewandelt werden -2, von denen keiner in einem Wert vom Typ int dargestellt werden kann, was zu dem NumberFormatException führt, das Sie sehen.

    
David Conneely 14.02.2013, 20:37
quelle
6

Wie oben erläutert, konvertiert Integer.toBinaryString () ~ 0 und ~ 1 in unsigned int, so dass sie Integer.MAX_VALUE überschreiten.

Sie könnten long verwenden, um zu analysieren und wie folgt in int zu konvertieren.

%Vor%     
Eddie 14.02.2013 21:35
quelle
1

Die Bits für "~ 0" sind 11111111111111111111111111111111 (32 1). Normalerweise entspricht dies der Zahl -1. Die Bits für "~ 1" sind 1111111111111111111111111111111110 (31 1 gefolgt von einer Null). Normalerweise entspricht dies der Zahl -2.

Ich habe versucht "01111111111111111111111111111111" (eine 0 und 31 1), die die höchste vorzeichenbehaftete ganze Zahl darstellt, in parseInt und es gab keinen Fehler. Aber ich habe versucht "1000000000000000000000000000000000", die die minimale vorzeichenbehaftete Ganzzahl darstellt, und es gab den Fehler erneut.

Die parseInt -Methode scheint zu erwarten, dass ein "-" in der Eingabe anzeigt, dass eine negative Zahl gewünscht wird. Es sieht so aus, als ob diese Methode einen Überlauf in der Ganzzahl erkennt und den NumberFormatException auslöst.

    
rgettman 14.02.2013 20:37
quelle

Tags und Links