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
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.
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.