42-15-6
The - operator is defined as left-associative, meaning that 42-15 is evaluated and then 6 is subtracted from the result. If the - operator were defined as right-associative, the expression to the right of the operator would be evaluated first: 15-6 would be evaluated and then subtracted from 42.
All binary operators-that is, operators that take two operands-except the assignment operators, are said to be left-associative, meaning that the expression is evaluated from left to right. Therefore, a + b + c is the same as (a + b) + c where a + b is evaluated first and c is added to the resulting sum. Assignment operators and the conditional operator are said to be right-associative-the expression is evaluated from right to left. In other words, a = b = c is equivalent to a = (b = c). This trips up some people who want to place multiple assignment operations on the same line, so let's look at some code: -
using System; class RightAssocApp { public static void Main() { int a = 1; int b = 2; int c = 3; Console.WriteLine("a={0} b={1} c={2}", a, b, c); a = b = c; Console.WriteLine("After 'a=b=c': a={0} b={1} c={2}", a, b, c); } }
The results of running this example are the following: -
a=1 b=2 c=3 After 'a=b=c': a=3 b=3 c=3
Seeing an expression evaluated from the right might be confusing at first, but think of it like this: If the assignment operator were left-associative, the compiler would first evaluate a = b, which would give a value of 2 to a, and then it would evaluate b = c, which would give a value of 3 to b. The end result would be a=2 b=3 c=3. Needless to say, that wouldn't be the expected result for a = b = c, and this is why the assignment and conditional operator are both right-associative.