La règle

  1. Si un opérande est de type long double, l'autre opérande est converti en long double.
  2. Sinon si un opérande est de type double, l'autre opérande est converti en double.
  3. Sinon si un opérande est de type float, l'autre opérande est converti en float.
  4. Sinon la promotion des entiers est réalisée sur les deux opérandes. Ensuite :
    a.
    Si un opérande est de type unsigned long int, l'autre opérande est converti en unsigned long int.
    b.
    Sinon, si un opérande est de type long int et l'autre de type unsigned int, alors :
    -
    si un long int peut représenter toutes les valeurs d'un unsigned int, l'opérande de type unsigned int est converti en long int.
    -
    sinon, les deux opérandes sont convertis en unsigned long int.
    c.
    Sinon, si un opérande est de type long int, l'autre opérande est converti en long int.
    d.
    Sinon, si un opérande est de type unsigned int, l'autre opérande est converti en unsigned int.
    e.
    Sinon, les deux opérandes sont de même type, et il n'y a pas de conversion à réaliser.

Matthieu Moy 2017-02-08