Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more.
www.w3schools.com
Kurz gefasst, es ist immer der "größte" beteiligte Typ.
Tipp:
Code abtippen und starten. --> Die Ausgabe
Zum Datentyp ist das Stichwort implizite Typumwandlung. Dabei muss man beachten, dass der Compiler immer darauf achtete, dass möglichst keine Informationen verloren gehen. Das bedeutet es resultiert bei solchen Ausdrücken immer der Datentype der mehr Information speichert.
Anhand der Ausgabe sollte man auch den Ablauf des Programms verstehen,
Die Widening-Coercion Regeln in Java sind eigentlich totaler Mist.
Weil, "float" ist ja nicht _größer_ als long, alleine schon von der Bit-Weite des Datentypes, trotzdem kann aber ein long implizit in einen float konvertiert werden. Ja, bei float wird der Wert einfach als "Fließkommawert" interpretiert und so interpretiert kann man mit einem float eben auch "größere" Zahlen (also weiter weg von Null) repräsentieren, aber natürlich mit Einbußen in der Präzision.
Was dann selbstverständlich dazu führt, dass bei dieser Konvertierung auch Informationen verloren gehen, wie etwa bei:
(hier auch schon mit int -> float)
Java:
int a = 16777217;
float b = a;
System.out.println(b); // <- 16777216
Vermutlich hat man sich einfach für diese Kette der impliziten Konvertierungen entschieden, weil andere Sprachen (most notably C) das auch so macht.
Es gibt auch durchaus Sprachen, die genau solche eigentlich schwachsinnigen automatischen Konvertierungen einfach verbieten, was meiner Meinung nach die saubere Lösung wäre.