Java, Lang.analysieren Binär-String
Warum funktioniert dieser code werfen NumberFormatException
:
String binStr = "1000000000000000000000000000000000000000000000000000000000000000";
System.out.println(binStr.length());//= 64
System.out.println(Long.parseLong(binStr, 2));
- Re-Lektüre dieses, es ist eigentlich eine gute Frage.
- Kann dies eine interessante Frage, aber sicherlich nicht einen gute Frage.
Du musst angemeldet sein, um einen Kommentar abzugeben.
1000000000000000000000000000000000000000000000000000000000000000
ist größer alsLong.MAX_VALUE
.Sehen https://stackoverflow.com/a/8888969/597657
Erwägen Sie die Verwendung
BigInteger(String val, int radix)
statt.EDIT:
OK, das ist neu für mich. Es scheint, dass
Integer.parseInt(binaryIntegerString, 2)
undLong.parseLong(binaryLongString, 2)
analysieren binary als sign-magnitude nicht als 2-Komplement.String binStr = "1000000000000000000000000000000000000000000000000000000000000000"; System.out.println(binStr.length());// = 64 System.out.println(Long.parseLong(binStr, 2));
parseInt()
Griffe binäre.Weil es out of range.
1000...000
263, aberLong
geht nur bis 263 - 1.Long.MIN_VALUE
von der bit-Muster, aberparseLong
nicht so. Jeden Tag etwas neues lernen 🙂Dies ist die gleiche für alle
Long
,Integer
,Short
undByte
. Ich erkläre mit einemByte
Beispiel, weil es lesbar ist:Den Ziffern interpretiert werden, unsigniert, egal, was radix zur Verfügung. Wenn Sie möchten, einen negativen Wert, haben Sie das minus-Zeichen am Anfang der Zeichenfolge. JavaDoc sagt:
Um
MAX_VALUE
wir brauchen:Größte long-Wert eigentlich ist:
Dies ist, weil Lange.parseLong nicht analysieren kann Zweierkomplement-Darstellung. Der einzige Weg, um zu analysieren, Zweierkomplement-Binär-string-Repräsentation in Java SE BigInteger:
dieser gibt erwarten -9223372036854775808result
Dies ist die größte mögliche lange (9223372036854775807 = 2 exp 63 - 1) im binären format. Hinweis: das L am Ende der letzten Ziffer.