* Either operand is of type long double: Other operand is converted to type long double.
* Preceding condition not met and either operand is of type double: Other operand is converted to type double.
* Preceding conditions not met and either operand is of type float: Other operand is converted to type float.
* Preceding conditions not met (none of the operands are of floating types): Operands get integral promotions as follows:
* If either operand is of type unsigned long, the other operand is converted to type unsigned long.
* If preceding condition not met, and if either operand is of type long and the other of type unsigned int, both operands are converted to type unsigned long.
* If the preceding two conditions aren't met, and if either operand is of type long, the other operand is converted to type long.
* If the preceding three conditions aren't met, and if either operand is of type unsigned int, the other operand is converted to type unsigned int.
* If none of the preceding conditions are met, both operands are converted to type int.