Datentypen Explizite Konvertierung

knowledge

Bekanntes Mitglied
short a;
int b = 5;

a = b; geht ja nicht ohne explizite Konvertierung da ein größerer Wertebereich (int) in einen kleineren (short) gepackt werden soll.

Der Compiler betrachtet hierbei ja nur den Wertebereich und nicht die konkreten Werte die zugewiesen werden (z.B. hier 5).
Warum wird nicht der konkrete Wert berücksichtigt. Den Wert 5 könnte man ja durchaus auch mit dem Wertebereich von short ausdrücken. Warum wird das nicht gemacht?
 
Der Compiler geht nicht nach Inhalt. Ist halt einfach so. Die eigentliche Konvertierung übernimmt erst der Interpreter des byte-Codes, der anhand der Befehle die der Compiler zu fressen gekriegt hat erzeugt wurde.
 
naja du vergleichst 00000000 00000101 mit 00000000 00000000 00000000 00000101 und das ist nunmal nicht gleich. der compiler findet nur syntaxfehler, keine logikfehler
 
Na aber bei der Zuweisung ist es doch egal.

0000 0000 0000 0000 0000 0000 0000 0101 --> 5 als Bitmuster in int

0000 0000 0000 0101 --> 5 als Bitmuster in short

Ich mein ich kann ohne Wertverlust das eine Bitmuster in das andere übertragen. Semantik 5 bleibt ja erhalten
 
Warum stört dich das? sei doch froh das er dich bei der zuweisung darauf hinweist das da buggefahr herrscht. Wenn er dich nicht warnt beschwerst du dich nachher wieso das programm nciht so funktioniert wie du denkst.
 
Andi_CH hat es doch schon erklärt, zur Compilezeit sind die Werte nicht unbedingt bekannt, also meckert der Compliler schon vorher wenn die Wertebereiche nicht kompatibel sind.
 
umso nochmal zu sagen

im grunde sieht er nur [c]a = b[/c] mit den Typen... und das geht nicht
 
Also beispielsweise bei ner Fallunterscheidung oder sowas? Oder wie ist das gemeint mit nicht bekannt...
Du vergisst den wichtigsten Punkt: Die Typ deklaration
Der Compiler kann nicht wissen welche Werte deine Variablen zur Laufzeit haben, aber er weiss dass nicht jeder int in ein short passt, deswegen ist implizite Konvertierung verboten.
 
der compiler sieht nur [c]short = int;[/c] udn das geht nicht, da er nicht weiß was er machen soll. vorne was wegstreichen? hinten was wegstreichen? vorne und hinten?
 
Du vergisst den wichtigsten Punkt: Die Typ deklaration
Der Compiler kann nicht wissen welche Werte deine Variablen zur Laufzeit haben, aber er weiss dass nicht jeder int in ein short passt, deswegen ist implizite Konvertierung verboten.

Wieso "kann" das der Compiler nicht? Könnte er nicht einfach den Programmablauf prüfen ob irgendwo ne Zuweisung von z.B. 5 stattfindet, was ja passen würde?
 
Wieso "kann" das der Compiler nicht? Könnte er nicht einfach den Programmablauf prüfen ob irgendwo ne Zuweisung von z.B. 5 stattfindet, was ja passen würde?
Was ist denn wenn der Wert nicht final ist & hardcodiert im Source steht, sondern erst zur Laufzeit bekannt ist?

Die von dir erwähnte Ausnahme mag zwar zutreffen, aber es bleibt doch nur eine Ausnahme.
 

Zurück
Oben