Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of mappen te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen om mappen te wijzigen.
De meeste C-operators voeren typeconversies uit om de operanden van een expressie naar een gemeenschappelijk type te brengen of om korte waarden uit te breiden naar de gehele grootte die wordt gebruikt in machinebewerkingen. De conversies die door C-operators worden uitgevoerd, zijn afhankelijk van de specifieke operator en het type operand of operands. Veel operators voeren echter vergelijkbare conversies uit op operanden van integrale en zwevende typen. Deze conversies worden 'rekenkundige conversies' genoemd. Bij de conversie van een operandwaarde naar een compatibel type wordt de waarde niet gewijzigd.
De rekenkundige conversies die hieronder worden samengevat, worden 'gebruikelijke rekenkundige conversies' genoemd. Deze stappen worden alleen toegepast voor binaire operators die rekenkundige typen verwachten. Het doel is om een gemeenschappelijk type op te geven dat ook het type resultaat is. Om te bepalen welke conversies daadwerkelijk plaatsvinden, past de compiler het volgende algoritme toe op binaire bewerkingen in de expressie. De onderstaande stappen zijn geen prioriteitsvolgorde.
Als een van de operanden van het type
long doubleis, wordt de andere operand geconverteerd naar typelong double.Als niet aan de bovenstaande voorwaarde wordt voldaan en een van beide operanden van het type
doubleis, wordt de andere operand geconverteerd naar typedouble.Als niet aan de bovenstaande twee voorwaarden wordt voldaan en een van beide operanden van het type
floatis, wordt de andere operand geconverteerd naar typefloat.Als niet aan de bovenstaande drie voorwaarden wordt voldaan (geen van de operanden is van zwevende typen), worden integrale conversies op de operanden als volgt uitgevoerd:
Als een van de operanden van het type
unsigned longis, wordt de andere operand geconverteerd naar typeunsigned long.Als niet aan de bovenstaande voorwaarde wordt voldaan en een van beide operanden van het type
longis en het andere typeunsigned int, worden beide operanden geconverteerd naar typeunsigned long.Als niet aan de bovenstaande twee voorwaarden wordt voldaan en een van beide operanden van het type
longis, wordt de andere operand geconverteerd naar typelong.Als niet aan de bovenstaande drie voorwaarden wordt voldaan en een van beide operanden van het type
unsigned intis, wordt de andere operand geconverteerd naar typeunsigned int.Als aan geen van de bovenstaande voorwaarden wordt voldaan, worden beide operanden geconverteerd naar type
int.
De volgende code illustreert deze conversieregels:
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
*/