Die Interpretation einer negativen Zahl als unsigned mit BigInteger
Ist es möglich zu analysieren, eine negative Zahl in eine vorzeichenlose Wert mit Java BigInteger
?
Also zum Beispiel, ich würde interpretieren -1
als FFFFFFFFFFFFFFFF
.
BigInteger hat unbegrenzte Länge. Auf welches Kriterium -1 wäre intepreted als FFFFFFFFFFFFFFFF statt, sagen, FFFFFFFF oder FF ?
warum brauchen Sie BigInteger?
warum brauchen Sie BigInteger?
Long.toHexString(-1)
= FFFFFFFFFFFFFFFFInformationsquelleAutor One Two Three | 2012-06-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie daran denken, ein Zweierkomplement ist, müssen Sie angeben, arbeiten die bit-Länge. Einen Java-long hat 64 bit, aber ein BigInteger ist nicht begrenzt.
Könnten Sie tun etwas wie dieses:
Aber dies würde implizit bedeuten, dass Sie die Arbeit mit BigIntegers in der 0 bis 2^64-1-Bereich.
Oder, mehr allgemein:
Mehr fooproof, könnte man hinzufügen, einige Prüfungen, z.B.
0xCCCCCCCC
. DieBigInteger
scheint gut, aber wenn ich rufe#toByteArray
bekomme ich fünf bytes:CC CC CC CC 00
. Irgendeine Idee warum?InformationsquelleAutor leonbloy
Versuchen Sie es mit dem Konstruktor
Der erste parameter sollte auf 1 gesetzt werden, um anzugeben, die Sie möchten, erstellen Sie eine positive Zahl ist. Das byte-array ist die Zahl, die Sie analysieren, in BIG-ENDIAN-REIHENFOLGE. Es sollte so interpretiert werden, eine Zahl ohne Vorzeichen, wenn Sie den ersten parameter auf 1. Der einzige trick ist immer Ihre Nummer in ein byte-array, aber das sollte nicht Biene zu schwierig.
EDIT: Sieht aus wie Sie haben zu tun, einige manuelle bit-Arithmetik hier. Wenn ich verstehe dein problem richtig, Sie müssen interpretiert einen String als Long und dann zu interpretieren, die lange als unsigned und speichern, die in der BigInteger-Klasse. Würde ich dies tun.
Ok, lassen Sie mich darüber nachdenken für eine Sekunde. Sie werden gegeben ein String-Objekt, und wollen, konvertieren Sie es in einen unsigned BigInteger? In diesem Fall, wissen Sie, wenn Ihr String-Objekt repräsentiert ein int oder ein long?
Wollte, um meine eigene Antwort... aber toByteArray() ist wahrscheinlich das, was Sie suchen.
InformationsquelleAutor Akron
Können Sie jederzeit manuell tun Zweierkomplement. Wenn die Zahl kleiner als 0 ist, dann inverse aller bits und addieren.
InformationsquelleAutor Gerhard Powell
One-Liner(aber nicht vergessen, zu prüfen, endiness Probleme mit der Quelle, die behandelt werden können mit ByteBuffer.byteOrder):
InformationsquelleAutor LINEMAN78
Ist es, was Sie, was?
ffffffff
😉InformationsquelleAutor Ahmet Karakaya
Können Sie dieses Dienstprogramm verwenden, zum konvertieren in eine Ganzzahl ohne Vorzeichen. Da BigIntegers haben unbegrenzte Größe, eine Größe muss angegeben werden, um zu bestimmen, wie viel Zeichen-Erweiterung zu halten, in der übersetzung:
InformationsquelleAutor user3158036
Die einfache Lösung von @Ahmet Karakaya, sollte aber behoben werden, für größere zahlen:
Ergebnis:
ffffffffffffffff
oder einfach:
InformationsquelleAutor MariuszS