Pour une réponse plus détaillée. Regardez ce que dit la section §5 / 9 du standard C ++
De nombreux opérateurs binaires qui attendent des opérandes de type arithmétique ou énumération provoquent des conversions et produisent des types de résultats de la même manière. Le but est de produire un type commun,
qui est également le type du résultat .
Ce modèle est appelé les conversions arithmétiques habituelles, qui sont définies comme suit:
- Si l'un des opérandes est de type double long, l'autre doit être converti en double long.
- Sinon, si l'un des opérandes est double, l'autre doit être converti en double.
- Sinon, si l'un des opérandes est float, l'autre doit être converti en float.
- Sinon, les promotions intégrales (4.5) doivent être effectuées sur les deux opérandes.54)
- Ensuite, si l'un des opérandes est long non signé, l'autre doit être converti en non signé long.
- Sinon, si un opérande est un long int et l'autre non signé, alors si un long int peut représenter toutes les valeurs d'un unsigned int, le unsigned int doit être converti en un long int; sinon, les deux opérandes doivent être convertis en un entier long non signé.
- Sinon, si l'un des opérandes est long, l'autre doit être converti en long.
- Sinon, si l'un des opérandes n'est pas signé, l'autre doit être converti en non signé.
[Remarque: sinon, le seul cas restant est que les deux opérandes sont des entiers]
^
XOR.