Arithmetik im gemischten Modus (Arithmetik zwischen Operanden unterschiedlichen Typs und/oder unterschiedlicher Größe) ist zulässig, aber anfällig. Der C-Standard definiert Regeln für die Typumwandlung, um die Operanden in eine gemeinsame Darstellung zu konvertieren. Die automatische Typumwandlung ermöglicht es dem Compiler, für Operationen im gemischten Modus etwas Vernünftiges zu tun, aber "vernünftig" bedeutet nicht unbedingt "korrekt".
Um wirklich zu wissen, ob das Verhalten korrekt ist oder nicht, müssen Sie zunächst die Regeln für die Beförderung und dann die Darstellung der Datentypen verstehen. Unter sehr allgemeine Bedingungen:
- kürzere Typen werden in längere Typen umgewandelt (
float
a double
, short
a int
, usw.)
- Ganzzahlige Typen werden in Fließkomma-Typen umgewandelt
- signierte/unsignierte Konvertierungen zur Vermeidung von Datenverlusten (unabhängig davon, ob signiert in vorzeichenlos umgewandelt wird oder umgekehrt, hängt von der Größe der jeweiligen Typen ab)
Ob Code wie x > y
(wobei x
y y
verschiedene Arten haben) richtig oder falsch ist, hängt von den Werten ab, die x
y y
nehmen kann. Meiner Erfahrung nach ist es gängige Praxis, implizite Typkonvertierungen (über den Codierungsstandard) zu verbieten. Der Programmierer muss den Kontext berücksichtigen und alle notwendigen Typkonvertierungen explizit durchführen.