An expression is any legal combination of operators and operands. All expressions evaluate to a single number of a specific data type. An assignment operator evaluates to the value assigned.
Some expressions have side effects, which change memory.
An expression's side effects must have taken place only at sequence points. Logical operators evaluate to 1 if true and 0 if false. An operator can only evaluate its operands if they are all the same data type. All unary operators have the same precedence and associativity. C doesn't provide a separate string data type.