Datentypen Literal überschreitet long-Range, dennoch als long an Variable übergeben

Jontour

Mitglied
Moin!

Vorweg:
Ich bin Anfänger und meine folgenden Fragen sind für euch wahrscheinlich rudimentär und trivial.

1. Frage

folgender Fall:
Java:
public class Neu
{
  public static void main(String[] args)
  {
      long a = 9223372036854776000L;
  }
}
Fehlermeldung: Das Literal ist ausserhalb der Reichweite für Long-Datentypen.
Merke: die letzten 4 Stellen --> 6000L

Ergänze ich den Code aber folgendermaßen:
Java:
public class Neu
{
  public static void main(String[] args)
  {
      long a = 9223372036854775000L + 1000;
  }
}
... dann lässt sich die Summe problemlos an die Variable a übergeben.
Merke: die letzten 4 Stellen --> 5000L + 1000

2. Frage

Warum wird die Variable a (wenn ich sie auf die Konsole schreibe) im falle von
Java:
      long a = 9223372036854775000l + 1000;
plötzlich negativ?!
==> -9223372036854775616


Danke & Gruß
 

Salo

Aktives Mitglied
1. Weil es keine 1000 addiert. (lass dir den wert mal ausgeben)

Java:
 public class LongTester {
    public static void main(String[] args) {
        long l = ...5000L + 1000;
        System.out.println(l);
    }
}
 
Zuletzt bearbeitet:

Meniskusschaden

Top Contributor
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.
 

Salo

Aktives Mitglied
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.

Genau das meinte ich, nur ich habs nicht so ausführlich beschrieben.
 
X

Xyz1

Gast
Es findet ein s. g. long-Überlauf statt - hätt's auch getan...

Wegen dem Wertebereich musst du mal "schauen".
 

Meniskusschaden

Top Contributor
1. Weil es keine 1000 addiert. (lass dir den wert mal ausgeben)
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
führt zu folgendem Ergebnis:
Code:
-9223372036854775616
9223372036854776000
 

Jontour

Mitglied
Danke für eure Antworten!
System.out.println(Long.toUnsignedString(a)); // geht erst seit Java8[/code]
führt zu folgendem Ergebnis:
Code:
-9223372036854775616
9223372036854776000
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:
public class Neu
{
  public static void main(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?
 

Meniskusschaden

Top Contributor
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 hängt von den Anforderungen ab. Mit double kann man zwar größere Zahlen abbilden, aber letztendlich sind es auch nur 64Bit. Man verliert dann eben Genauigkeit. Die Klasse BigInteger könnte eine Lösung sein: http://openbook.rheinwerk-verlag.de...12_006.htm#mjb7eac3af197800d59092e82df405f7d8
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Antegra Tekkrebell Primitive Datentypen Literal 8072 Java Basics - Anfänger-Themen 21
K Rekursiv zu Literal Java Basics - Anfänger-Themen 12
K Literal für Binärzahlen ? Java Basics - Anfänger-Themen 12
krgewb String mit Datumsangabe in Long umwandeln Java Basics - Anfänger-Themen 2
J Java long- in int-Variable umwandeln Java Basics - Anfänger-Themen 6
M Long-Typ in String-Änderung führt zu keinem Ergebnis bei großer Zahl Java Basics - Anfänger-Themen 11
MiMa Probleme mit Datentyp long ?? Java Basics - Anfänger-Themen 2
C Long value an Stringbuilder übergeben, equals Methode funktioniert nicht Java Basics - Anfänger-Themen 2
krgewb Long wird gerundet Java Basics - Anfänger-Themen 2
Eule25 Arbeit mit long und int, Error: integer number too large Java Basics - Anfänger-Themen 2
javapingu Hex String zu long Java Basics - Anfänger-Themen 2
J Long Typ Java Basics - Anfänger-Themen 4
FelixN Array mit verschiedene Datentypen als Rückgabewert? (Long und Double) Java Basics - Anfänger-Themen 3
I Klassen Eine ArrayList<Long>, die sich automatisch sortiert Java Basics - Anfänger-Themen 20
O Long[] in long Java Basics - Anfänger-Themen 3
D Compiler-Fehler Java long und int Java Basics - Anfänger-Themen 1
Harlequin Compiler-Fehler Text Adventure - "Long Output" Fehler Java Basics - Anfänger-Themen 3
W The type Long is not visible HashMap Java Basics - Anfänger-Themen 4
Hanschyo String kann nicht Werte von Long annehmen Java Basics - Anfänger-Themen 2
Orkanson Long Binär darstellen Java Basics - Anfänger-Themen 1
F HashMap sortieren <String, Long> Java Basics - Anfänger-Themen 3
E Von Double zu Long umwandeln Java Basics - Anfänger-Themen 9
T Bitte um Hilfe bei Aufgabe: Long zahl = Long.parseLong(args [0]); Java Basics - Anfänger-Themen 3
K Erste Schritte switch - Warum sind long/float/double/... nicht erlaubt? Java Basics - Anfänger-Themen 5
F Char in Long umwandeln? Java Basics - Anfänger-Themen 2
M Frage Long Wert in Java Java Basics - Anfänger-Themen 1
A Long in BigInteger Java Basics - Anfänger-Themen 3
T long wird ohne Nachkommastellen ausgegeben Java Basics - Anfänger-Themen 5
G Long und Frage zum Speicherplatz eines Arrays Java Basics - Anfänger-Themen 7
S OOP long prüfen Java Basics - Anfänger-Themen 5
B map.remove(long) Java Basics - Anfänger-Themen 5
G Rechnen mit Long Variablen Java Basics - Anfänger-Themen 4
N Zufälliger Long Java Basics - Anfänger-Themen 15
SheldoN Zahlen die über long-Wert hinausragen Java Basics - Anfänger-Themen 4
H TreeMap<> statt TreeMap<Long, String> Java Basics - Anfänger-Themen 2
SheldoN Gibt es größere Datentypen als long? Java Basics - Anfänger-Themen 2
G Long oder int Vorzeichen entfernen Java Basics - Anfänger-Themen 3
M Datentypen Calender TimeInMillis - long number erzeugen? Java Basics - Anfänger-Themen 2
D Konvertierung UnsignedInt zu long Java Basics - Anfänger-Themen 5
A long Wert in hexadezimales Array umwandeln Java Basics - Anfänger-Themen 3
A string bitweise in long umwandeln Java Basics - Anfänger-Themen 7
A Konvertierung String-->hex-->long Java Basics - Anfänger-Themen 7
O 64bit- OS byte, short, int oder long bzw. float oder double? Java Basics - Anfänger-Themen 13
G Datentypen Ein long[]-Array. Java Basics - Anfänger-Themen 5
G Datentypen Eclipse akzeptiert 'long' nicht Java Basics - Anfänger-Themen 2
N Mit long rechnen Java Basics - Anfänger-Themen 2
W Long to String Java Basics - Anfänger-Themen 7
B Long als Eingabeaufforderung Java Basics - Anfänger-Themen 3
H Long (64Bit) in 2 int (32Bit) zerlegen Java Basics - Anfänger-Themen 2
S Long und Float Frage Java Basics - Anfänger-Themen 2
N Datentypen Wurzel aus long ziehen Java Basics - Anfänger-Themen 4
O Runden - x/100 liefert long zurück Java Basics - Anfänger-Themen 7
A mdoulo methode mit long Java Basics - Anfänger-Themen 9
Binary.Coder Skalarprodukt mittels long und binärzahlen Java Basics - Anfänger-Themen 5
A Long zu Double Java Basics - Anfänger-Themen 4
B (long)1e9 Java Basics - Anfänger-Themen 6
V wozu ist das 'L' beim long notwendig ? Java Basics - Anfänger-Themen 5
J Länge eines long wertes Java Basics - Anfänger-Themen 13
S Division von long! Java Basics - Anfänger-Themen 4
Spot84 long von getCreationDate in String umwandeln Java Basics - Anfänger-Themen 4
S Probleme beim Umwandeln von Long nach Int Java Basics - Anfänger-Themen 4
G long[] aus SQL-Abfrage Java Basics - Anfänger-Themen 3
G String in Long casten Java Basics - Anfänger-Themen 2
N long geteilt durch long gleich null ? Java Basics - Anfänger-Themen 8
G int gleich long ? Java Basics - Anfänger-Themen 2
J A Long. way Java Basics - Anfänger-Themen 10
T Probleme mit long Java Basics - Anfänger-Themen 2
G NumberFormatException bei double und long Java Basics - Anfänger-Themen 11
G long zu kurz Java Basics - Anfänger-Themen 5
G long datum splitten in day etc Java Basics - Anfänger-Themen 23
G Konvertierung String in long type Java Basics - Anfänger-Themen 15
G Zahlen >long verwenden Java Basics - Anfänger-Themen 7
G Problem beim rechenen mit long Java Basics - Anfänger-Themen 3
G long oder double Java Basics - Anfänger-Themen 15
C Long -> String -> ArrayList adden -> Exception Java Basics - Anfänger-Themen 4
M long in byte[] konvertieren und wieder zurück Java Basics - Anfänger-Themen 2
S long millisekunden nach Uhrzeit format Java Basics - Anfänger-Themen 5
M Quersumme einer long zahl Java Basics - Anfänger-Themen 4
M long Datentyp effizient mit Daten füllen Java Basics - Anfänger-Themen 2
F Long umwandeln und auf 2 Dezimalen runden? Java Basics - Anfänger-Themen 14
G long in string Java Basics - Anfänger-Themen 6
G long-Zeitwert Java Basics - Anfänger-Themen 11
P "Line too long" bei der Generierung des jars. Java Basics - Anfänger-Themen 5
B String <> long --- Das ist doch nicht inkonvertibel? Java Basics - Anfänger-Themen 4
F Long zu 2 int und zurück Java Basics - Anfänger-Themen 3
G Hexadezimalzahl von String in Long umwandeln Java Basics - Anfänger-Themen 3
P von long zu int umwandeln? Java Basics - Anfänger-Themen 3
A formatieren long(bytes) -> String Java Basics - Anfänger-Themen 2
T long in Vector speichern Java Basics - Anfänger-Themen 16
G "cannot convert from long to int" - problem Java Basics - Anfänger-Themen 9
G Vergleich zweier 'long'-Werte. Problem! Java Basics - Anfänger-Themen 6
M long nach String casten Java Basics - Anfänger-Themen 2
N x.toString(x); umwandlung von long in String Java Basics - Anfänger-Themen 3
P Wie mach ich aus Int ein Double oder Long ? Java Basics - Anfänger-Themen 6
N unsigned int to long Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben