An expression combines literals, names, operators, and symbols to manipulate or display values.
Lvalues and Rvalues
An lvalue is an object reference and an rvalue is a value with the main difference between the two playing a role in how expressions are written and understood.
With arithmetic expressions the operands must be of the same type and if each are different then they must be converted to match before you can perform operations.
An arithmetic type is a bool, char, signed char, unsigned char, int, short, long, unsigned int, unsigned sort, unsigned long, float, double, or long double.