Aby uzyskać bardziej szczegółową odpowiedź. Zobacz, co mówi sekcja §5 / 9 ze standardu C ++
Wiele operatorów binarnych, które oczekują operandów typu arytmetycznego lub wyliczeniowego, powoduje konwersje i zwraca typy wyników w podobny sposób. Celem jest uzyskanie wspólnego typu,
który jest jednocześnie typem wyniku .
Ten wzorzec nazywa się zwykłymi konwersjami arytmetycznymi, które są zdefiniowane w następujący sposób:
- Jeśli jeden z operandów jest typu long double, drugi zostanie przekonwertowany na long double.
- W przeciwnym razie, jeśli jeden z operandów jest podwójny, drugi zostanie przekonwertowany na podwójny.
- W przeciwnym razie, jeśli jeden z operandów jest zmiennoprzecinkowy, drugi zostanie przekonwertowany na zmiennoprzecinkowy.
- W przeciwnym razie promocje całkowe (4.5) będą wykonywane na obu operandach. 54)
- Następnie, jeśli jeden z argumentów jest długi bez znaku, drugi zostanie przekonwertowany na długość bez znaku.
- W przeciwnym razie, jeśli jeden operand jest typu long int, a drugi int bez znaku, to jeśli long int może reprezentować wszystkie wartości typu unsigned int, to unsigned int zostanie przekonwertowany na długi int; w przeciwnym razie oba operandy zostaną przekonwertowane na unsigned long int.
- W przeciwnym razie, jeśli jeden z operandów jest długi, drugi zostanie przekonwertowany na długi.
- W przeciwnym razie, jeśli jeden z operandów jest bez znaku, drugi zostanie przekonwertowany na bez znaku.
[Uwaga: w przeciwnym razie jedynym pozostałym przypadkiem jest to, że oba operandy są int]
^
XOR.