Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Die meisten C-Operatoren führen Typkonvertierungen aus, um die Operanden eines Ausdrucks in einen allgemeinen Typ zu bringen oder um kurze Werte auf die ganzzahlige Größe zu erweitern, die bei Computervorgängen verwendet wird. Die Konvertierungen, die von C-Operatoren ausgeführt werden, hängen vom bestimmten Operator und dem Typ des Operanden oder der Operanden ab. Viele Operatoren führen jedoch ähnliche Konvertierungen für Operanden des Ganzzahl- und Gleitkommatyps aus. Diese Konvertierungen werden als „arithmetische Konvertierungen“ bezeichnet. Die Konvertierung eines Operandenwerts in einen kompatiblen Typ bewirkt keine Änderung an seinem Wert.
Die unten zusammengefassten arithmetischen Konvertierungen werden als „übliche arithmetische Konvertierungen“ bezeichnet. Diese Schritte werden nur für binäre Operatoren angewendet, die einen arithmetischen Typ erwarten. Der Zweck besteht darin, einen allgemeinen Typ zu erhalten, der gleichzeitig der Ergebnistyp ist. Um zu bestimmen, welche Konvertierungen tatsächlich durchgeführt werden, wird der folgende Algorithmus vom Compiler auf binäre Operationen im Ausdruck angewendet. Die folgenden Schritte sind in beliebiger Reihenfolge aufgeführt.
Wenn einer der beiden Operanden vom Typ
long doubleist, wird der andere Operand in den Typlong doubleumgewandelt.Wenn die oben genannte Bedingung nicht erfüllt wird und einer der Operanden den Typ
doubleaufweist, wird der andere Operand in den Typdoublekonvertiert.Wenn die beiden oben genannten Bedingungen nicht erfüllt werden und einer der Operanden den Typ
floataufweist, wird der andere Operand in den Typfloatkonvertiert.Wenn die oben genannten drei Bedingungen nicht erfüllt werden (keiner der Operanden ist ein Gleitkommatyp), werden die Ganzzahlkonvertierungen für den Operanden wie folgt ausgeführt:
Wenn einer der beiden Operanden vom Typ
unsigned longist, wird der andere Operand in den Typunsigned longumgewandelt.Wenn die oben genannte Bedingung nicht erfüllt wird und einer der Operanden den Typ
longund der andere den Typunsigned intaufweist, werden beide Operanden in den Typunsigned longkonvertiert.Wenn die beiden oben genannten Bedingungen nicht erfüllt werden und einer der Operanden den Typ
longaufweist, wird der andere Operand in den Typlongkonvertiert.Wenn die oben genannten drei Bedingungen nicht erfüllt werden und ein Operand den Typ
unsigned intaufweist, wird der andere Operand in den Typunsigned intumgewandelt.Wenn keine der oben genannten Bedingungen erfüllt wird, werden beide Operanden in den Typ
intumgewandelt.
Das folgende Codebeispiel veranschaulicht diese Konvertierungsregeln:
float fVal;
double dVal;
int iVal;
unsigned long ulVal;
dVal = iVal * ulVal; /* iVal converted to unsigned long
* Uses step 4.
* Result of multiplication converted to double
*/
dVal = ulVal + fVal; /* ulVal converted to float
* Uses step 3.
* Result of addition converted to double
*/