Para más detalles responda. Mire lo que dice la sección §5 / 9 del Estándar C ++
Muchos operadores binarios que esperan operandos de tipo aritmético o de enumeración causan conversiones y producen tipos de resultados de manera similar. El propósito es producir un tipo común,
que también es el tipo del resultado .
Este patrón se llama las conversiones aritméticas habituales, que se definen de la siguiente manera:
- Si cualquiera de los operandos es del tipo long double, el otro se convertirá en long double.
- De lo contrario, si cualquiera de los operandos es doble, el otro se convertirá en doble.
- De lo contrario, si cualquiera de los operandos es flotante, el otro se convertirá en flotante.
- De lo contrario, las promociones integrales (4.5) se realizarán en ambos operandos.
- Entonces, si cualquiera de los operandos no tiene signo largo, el otro se convertirá a largo sin signo.
- De lo contrario, si un operando es un int largo y el otro unsigned int, entonces si un int largo puede representar todos los valores de un unsigned int, el unsigned int se convertirá en un int largo; de lo contrario, ambos operandos se convertirán a int sin signo.
- De lo contrario, si cualquiera de los operandos es largo, el otro se convertirá en largo.
- De lo contrario, si cualquiera de los operandos no tiene signo, el otro se convertirá en sin signo.
[Nota: de lo contrario, el único caso restante es que ambos operandos son int]
^
es XOR.