Для більш детальної відповіді. Подивіться, що йдеться в розділі § 5/9 із стандарту C ++
Багато бінарних операторів, які очікують операнди арифметичного чи перелічувального типу, викликають перетворення та дають результати результатів аналогічним чином. Мета - отримати загальний тип,
який також є типом результату .
Ця закономірність називається звичайними арифметичними перетвореннями, які визначаються наступним чином:
- Якщо будь-який операнд має тип long double, інший повинен бути перетворений у long double.
- В іншому випадку, якщо будь-який операнд подвійний, інший перетворюється на подвійний.
- В іншому випадку, якщо будь-який операнд плаває, інший повинен бути перетворений на плаваючий.
- В іншому випадку інтегральні промоції (4.5) повинні виконуватися на обох операндах.54)
- Тоді, якщо будь-який операнд довго не підписаний, то інший повинен бути перетворений у ненаписаний довгий.
- В іншому випадку, якщо один операнд - це довгий int, а інший - непідписаний int, тоді, якщо довгий int може представляти всі значення неподписаного int, неподписаний int перетворюється на довгий int; інакше обидва операнди перетворюються на неподписані довгі int.
- В іншому випадку, якщо будь-який операнд довгий, інший перетворюється на довгий.
- В іншому випадку, якщо будь-який операнд не підписаний, інший перетворюється на непідписаний.
[Примітка: в іншому випадку єдиний залишився випадок - це те, що обидва операнди є int]
^
це XOR.