Erste Schritte Literale / Konstanten

fsicher2016

Mitglied
Nach meinem Wissen, werden
  • die Fliesskomma-Konstanten als "double" behandelt (ohne Sufix-Angabe), während
  • Ganzzahlige Konstanten als "int" behandelt werden.
// Beispiel mit Fliesskomma-Konstanten
float a = 3.5; // Kann nicht kompiliert werden
float b = 3.5f; // Das wird akzeptiert

// Beispiel mit Ganzzahl-Konstanten
byte c = 10; // Wird akzeptiert, obwohl '10' als int gesehen werden sollte
byte d = 128; // Das geht wieder nicht!!!

Es sieht danach aus, als ob Compiler (Achtung: Compiler) den Wert überprüfen würde und merkt, dass 10 noch in ein Byte passt, während 128 nicht mehr in ein Byte passt.

Wenn dies so ist, wieso merkt der Compiler nicht, dass 3.5 auch in ein 'float' passt? Mache ich hier einen Fehler in der Überlegung?

Danke.
 
*gähn* Guten Morgen,

3.5 ist double, für 10 (int) gibt es kein byte-Literal, double darf nicht implizit in float gewandelt werden. int ist kontextabhängig. Das ist die Erklärung. Die letztliche Prüfung kann nur der Compiler, natürlich auch IDE vorher.
 
Vielen Dank.

>> int ist kontextabhängig

Kannst du dazu etwas mehr sagen? Was heisst das? Gibt es da im Hintergrund eine "Logik", die je nach Situation anders funktioniert? Denn, wenn Compiler merkt, das int-Wert 10 in ein Byte passt, int-Wert 128 aber nicht, wäre zu erwarten, dass er auch merkt, dass double-Wert 3.5 (keine irrationale Zahl) in ein float ohne Verlust auch passt. Würde ich zumindest erwarten ...

Danke.
P.S.
Ich nutze keine IDE, um sicher zu sein, dass die IDE nicht "dazwischenfunkt".
 
Ja, richtig erkannt.
wäre zu erwarten, dass er auch merkt, dass double-Wert 3.5 (keine irrationale Zahl) in ein float ohne Verlust auch passt. Würde ich zumindest erwarten ...

Vorsichtig damit umgehen, nicht jeder double-Wert einer gewissen Range ( [ , ] ) kann verlustfrei in ein float konvertiert werden, oftmals ist das schon bei kleinen Werten nicht der Fall. Musst dir mal Fließkommadarstellung anschauen.
 

Zurück
Oben