Partager via


Conversions arithmétiques

De nombreux opérateurs binaires (traités dans Expressions avec les opérateurs binaires) entraînent des conversions des opérandes et du taux résultats de la même façon.La façon dont ces conversions de cause d'opérateurs est appelée « les conversions arithmétiques habituelles. » Les conversions arithmétiques des opérandes de différents types natifs sont exécutées comme indiqué dans le tableau suivant.Les types typedef se comportent selon leurs types natifs sous-jacents.

conditions pour la conversion de type

Spécifications accomplies

Conversion

L'un des opérandes est de type long double.

L'autre opérande est converti en type long double.

La condition précédente non remplie et un des opérandes est de type double.

L'autre opérande est converti en type double.

Les conditions précédentes non remplies et un des opérandes est de type float.

L'autre opérande est converti en type float.

Conditions précédentes non remplies (aucun des opérandes n'est des types de flottante).

Les promotions intégrales sont exécutées sur les opérandes comme suit :

  • Si l'un des opérandes est de type unsigned long, l'autre opérande est converti en type unsigned long.

  • Si précédent OR non satisfaite, et si l'un des opérandes est de type long et l'autre du type unsigned int, les deux opérandes sont convertis en type unsigned long.

  • Si les deux conditions précédentes ne sont pas réunies, et si l'un des opérandes est de type long, l'autre opérande est converti en type long.

  • Si les trois conditions précédentes ne sont pas réunies, et si l'un des opérandes est de type unsigned int, l'autre opérande est converti en type unsigned int.

  • Si aucune des conditions précédentes n'est remplie, les deux opérandes sont convertis en type int.

Le code suivant illustre les règles de conversion décrites dans le tableau :

// arithmetic_conversions.cpp
double dVal;
float fVal;
int iVal;
unsigned long ulVal;

int main() {
   // iVal converted to unsigned long
   // result of multiplication converted to double
   dVal = iVal * ulVal;

   // ulVal converted to float
   // result of addition converted to double
   dVal = ulVal + fVal;
}

La première instruction de l'exemple précédent affiche la multiplication de deux types intégraux, iVal et ulVal.La condition est remplie que ni l'un ni l'autre opérande n'est de type flottant et un opérande est de type unsigned int.Par conséquent, l'autre opérande, iVal, est converti en type unsigned int.le résultat est assigné à dVal.La condition est remplie qu'un opérande est de type double; par conséquent, le résultat d' unsigned int de la multiplication est converti en type double.

La deuxième instruction de l'exemple précédent montre l'ajout de float et d'un type intégral, l' fVal et l' ulVal.La variable d' ulVal est convertie en type float (troisième condition de la table).Le résultat de l'addition est converti en type double (ensuite condition dans la table) et assigné à dVal.

Voir aussi

Référence

Conversions standard