Der Datentyp long ist 64Bit groß. Da man auch negative Zahlen abbilden möchte, geht 1 Bit für das Vorzeichen verloren, so dass der größtmögliche darstellbare Wert in 63 Bit passen muß. Den Wert kannst du auch mit System.out.println(Long.MAX_VALUE);ausgeben lassen. Durch die Addition mit 1000 übersteigst du diesen Wert und gelangst dadurch in den Darstellungsbereich der negativen Zahlen. Näheres dazu steht zum Beispiel hier.
Der Datentyp long ist 64Bit groß. Da man auch negative Zahlen abbilden möchte, geht 1 Bit für das Vorzeichen verloren, so dass der größtmögliche darstellbare Wert in 63 Bit passen muß. Den Wert kannst du auch mit System.out.println(Long.MAX_VALUE);ausgeben lassen. Durch die Addition mit 1000 übersteigst du diesen Wert und gelangst dadurch in den Darstellungsbereich der negativen Zahlen. Näheres dazu steht zum Beispiel hier.
Das ist dann aber etwas mißverständlich ausgedrückt, denn tatsächlich wird ja 1000 addiert und wenn man das resultierende Bitmuster als vorzeichenlose Ganzzahl interpretieren würde, wäre es das erwartete Ergebnis. Folgender Code:
Java:
long a =9223372036854775000L+1000;System.out.println(a);System.out.println(Long.toUnsignedString(a));// geht erst seit Java8
Was erreiche ich, wenn ich nen Long-Typ zu nem UnsignedString konvertiere? Schummel ich mir da zusätzliche Bits hinzu, um sie doch noch per Long darstellen zu können? ^^
Der Datentyp long ist 64Bit groß. Da man auch negative Zahlen abbilden möchte, geht 1 Bit für das Vorzeichen verloren, so dass der größtmögliche darstellbare Wert in 63 Bit passen muß. Den Wert kannst du auch mit System.out.println(Long.MAX_VALUE);ausgeben lassen. Durch die Addition mit 1000 übersteigst du diesen Wert und gelangst dadurch in den Darstellungsbereich der negativen Zahlen. Näheres dazu steht zum Beispiel hier.
Merci beaucoup! Das hatte ich total vergessen. Wäre hierfür dann die Standardlösung, an die lange Zahl ein "D" zu hängen und dementsprechend auch, den ganzen Kram dann in einer double-Variable zu speichern?
Also so: ?
Java:
publicclassNeu{publicstaticvoidmain(String[] args){double a =9223372036854776000d;}}
Soweit ich mich entsinne war es doch ein bisl kritisch, mit Datentypen hin- und her zu jonglieren. Weil von Long nach Double gibt's Risiko für Rundungsfehler und umgekehrt geht die Genauigkeit flöten... richtig?
Was erreiche ich, wenn ich nen Long-Typ zu nem UnsignedString konvertiere? Schummel ich mir da zusätzliche Bits hinzu, um sie doch noch per Long darstellen zu können? ^^
Das ist nur eine kleine Hilfe, damit man sich den Wert von vorzeichenlosen Ganzzahlen bequem anzeigen lassen kann. Man kann damit aber natürlich nicht weiterrechnen.
Wäre hierfür dann die Standardlösung, an die lange Zahl ein "D" zu hängen und dementsprechend auch, den ganzen Kram dann in einer double-Variable zu speichern?
Das lässt sich so vereinfacht nicht sagen.
double beinhaltet ja noch viel mehr, was du nicht kennst.
Wenn es nicht auf die Genauigkeit ankommt, dann kannst du das so machen, ja.