Wie könnte ich konvertieren Sie eine 64-Breite Binär-string zu lang in Java?
Ich konvertieren möchten, eine 64-Breite Binär-string zu lang, es ist eine statische Methode:
Long.parseLong(String s, int radix)
um dies zu tun, aber es ist nicht geeignet für meinen Fall.
Das problem ist, mein Binär-string ist eine Maschine-Stil long int.
Beispiel:
1111111111111111111111111111111111111111111111111111111110000101
stellt -123
, aber diese Methode erkenne es als eine große positive Zahl ist, das beunruhigt mich, wie könnte ich dieses problem lösen?
Muss ich eine Funktion schreiben, die nicht Komplement?
- Könnten Sie bitte erklären, mehr auf
machine-style long int
und wie 123 dargestellt ist, die long binary. Coz Binär 1111011 123. Sorry, wenn ich nicht bekam auf Ihre Frage Recht. - Erste, ich Danke Ihnen sehr. Es -123 aber nicht die 123, die negativ ist. Maschine-Stil bedeutet, es ist die Darstellung der hardware des Computers, die "1" in das erste bit bedeutet negative Zahl ist, und 0 bedeutet nicht-positive Zahl, es ist unterschiedlich von Mensch-Stil, die mit "-" für negative Zahl ist. Bin ich klar?
- Ich denke, dass müssen Sie möglicherweise überprüfen Sie die string-Darstellung -123 als eine lange Nummer.
Long.toString(-123, 2)
Erträge-1111011
.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie BigInteger
Drucke
Meinen unglaublich gehackt-Lösung zusammen, getestet nur auf Ihren Fall:
Grundsätzlich, wenn das erste bit eine eins, ist die Zahl negativ, so werden wir analysieren den rest der Zahl als positiv, dann tun einige Zweierkomplement Magie durch subtrahieren das Ergebnis von
Long.MAX_VALUE
und hinzufügen, dann zwingt das negative wieder auf die Anzahl zurückgegeben. Ansonsten die normale Umwandlung gilt.return Long.parseLong(input.substring(1), 2) + Long.MIN_VALUE
.1
Könnte man einfach die bits selbst...
EDIT: ursprünglich hatte ich 1 << i, was bedeutet, dass die Verschiebung wird getan, als ein int. Fest, um es getan, als eine lange.
Ich glaube nicht, dass es eine library-Funktion zu tun, was Sie wollen, aber dieser sollte funktionieren:
Natürlich, sollten Sie überprüfen, um sicherzustellen, dass die string-Länge 64 und enthält nur 0 und 1.