standard conversion in C++

* 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.