Per una risposta più dettagliata. Guarda cosa dice la sezione §5 / 9 dello standard C ++
Molti operatori binari che prevedono operandi di tipo aritmetico o di enumerazione causano conversioni e generano tipi di risultati in modo simile. Lo scopo è quello di produrre un tipo comune,
che è anche il tipo del risultato .
Questo modello è chiamato le solite conversioni aritmetiche, che sono definite come segue:
- Se uno degli operandi è di tipo long double, l'altro deve essere convertito in long double.
- Altrimenti, se uno degli operandi è doppio, l'altro deve essere convertito in doppio.
- In caso contrario, se uno degli operandi è float, l'altro deve essere convertito in float.
- In caso contrario, le promozioni integrali (4.5) devono essere eseguite su entrambi gli operandi.54)
- Quindi, se uno degli operandi è unsigned long, l'altro deve essere convertito in unsigned long.
- Altrimenti, se un operando è un long int e l'altro unsigned int, quindi se un long int può rappresentare tutti i valori di un unsigned int, l'int unsigned deve essere convertito in un long int; in caso contrario entrambi gli operandi saranno convertiti in unsigned long int.
- Altrimenti, se uno degli operandi è lungo, l'altro deve essere convertito in lungo.
- In caso contrario, se uno degli operandi è senza segno, l'altro deve essere convertito in senza segno.
[Nota: altrimenti, l'unico caso rimanente è che entrambi gli operandi sono int]
^
è XOR.