Unsigned Int in Java
Ich versuche zu implementieren, eine bestehende Netzwerk-Protokoll, das macht starken Gebrauch von Unsigned Datentypen, die nicht unterstützt werden, die von Java. Was ich derzeit Tue, ist für jeden Datentyp, wählen Sie den nächst größeren, so dass die Zahl ohne Vorzeichen, passen in den positiven Bereich und verwenden Sie dann byte für byte verschieben, um die gewünschte Wirkung zu erzielen. Da dies ziemlich Fehler anfällig und für eine unsigned long weiter, ich habe mit BigInteger ist das viel schwerer als erweiterte Typen, ich Frage mich, ob es nicht eine bessere Weise, dies zu erreichen?
InformationsquelleAutor der Frage cdecker | 2010-12-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Je nachdem, was Sie tun, können Sie nur behandeln, solange ein 64-bit-Wert und int als 32-bit-Wert. Die meisten Operationen esp readInt/Lange writeInt/Lange arbeiten, durch ignorieren der signness.
Können Sie ein Beispiel der operation, die Sie durchführen auf der Grundlage dieser zahlen und vielleicht können wir vermuten, wie würde das gleiche tun, ohne zu müssen, erweitern Sie den Typ.
Beispielsweise, ++, --, +, -, *, ==, !=, <<, alle die gleiche Arbeit unabhängig von signess (also die Antwort). für >> Sie können substitue >>>
Es ist das /, %, >, >=, <, <= und Druck-Funktionen, die davon ausgehen, signierte Werte, aber Sie sollten in der Lage sein zu arbeiten, um diese (wenn Sie diese verwenden).
z.B.
EDIT: Warum funktioniert das? Teilweise, weil java nicht überlauf/Unterlauf Ausnahmen.
z.B.
InformationsquelleAutor der Antwort Peter Lawrey