1). * Operator precedence determines the priority level of each unique operator. * Operator associativity determines the order to evaluate operators that share the same priority level 2). Override the default precedence of operators 3). Operands have two different types 4). boolean expressions in C and C++ ultimately evaluate to 0 if false and true otherwise. In C there is no boolean type (until C99 with _Bool). In C++ bool is implicitly convertible to int in the domain [0, 1]. 5). + Readability of expressions would be easier to follow + Compatibility with languages (e.g. C and C++) - Users/programmers may be unaware of type conversions - Coercion rules may confuse maintainers 6). Certain operators (arithmetic) make more sense to be overloaded as it is more obvious what the intent should be. Readability and usage of language may improve 7). * Casting is explicitly performed as an expression * Coercion is automatically performed by the language 8). * Two-way selectors (if-else) * multiple-way selectors (switch) 9). + Logical grouping easier to distinguish + Visually matches cleaner than {} - More things to memorize - Code "bloat" -- extraneous code which provides no necessary meaning with additional keywords 10). It may be useful to know if a loop ended normally without breaking when performing a linear search. If the item isn't found, we may want to report that and ensure that the logic is associated with the loop itself rather than the code which may follow 11). j = -3; for (i = 0; j <= 0 && I < 3; i++) { if (j + 2 == 3 || j + 2 == 2) { j--; } else if (j == 2) { j += 2; } else { j = 0; } if (j <= 0) { j = 3 - 1; } } 12). if (x > 10) y = x; else if (x < 5) y = 2 * x; else if (x == 7) y = x + 10;