Chart of C order of operations: here.
Explanations are at the bottom of this page.
Order of Operations:
1: Unary (Increment, Decrement, Negate)
2: Parenthesis
3: Multiplication, Division, Modulo
4: Addition, Subtraction
5: Relational Operators
6: Logical Operators
Assume that:
- x equals 3
- y equals 4
- u equals true
- v equals false
for all of these expressions. Remember that true and 1 are equivalent, and likewise false and 0 are equivalent.
A1) 10 = 5 + 2 * 4 - 3A2) 14 = (5 + 2) * 6 / 3A3) 23 = 10 / 2 + 12 / 2 * 3A4) -1 = 4 * 2 + (6 + 3 * (7 - 4)) - 3 * 8A5) -6 = 6 + 9 * (2 + 4) - (47 + 19)B1) 1 = x - 3 < y + 4B2) 0 = (x + 7) / 5 + 4 > y * (7 + x)B3) 5 = (x + (2 * y - x) * y <= y * 6 - 1) * 5B4) 1 = x + y + (x * y) >= 7 + x * (5 - 2) / (2 * y)B5) 6 = (x + 1 == y) * (4 + 5 / (y + 1)) - x + yC1) 0 = u AND v == u OR vC2) 1 = v == (NOT u) OR vC3) 1 = (u AND x < y) OR (y > x * 3)C4) 10 = 2 * y - (1 - x) * (u OR v AND u)C5) 13 = ((u != v) AND u) + x * yBonus: 0 = x++ != y OR y-- != x
General advice: the first thing I do when I see an expression is format it to make it more readable.
For example, if I see multiplication or division, such as 5 * 8, I'll squish it together: 5*8.
If I see a logical or relational operator, I'll put the two operands in parenthesis to make them really clear.
If I see a negative before a parenthesis, I'll distribute it and turn it into a positive.
Little things like that can save you a lot of confusion when programming.
A1: 5 + 2 * 4 - 3
Firstly, let's group the multiplication: 5 + 2*4 - 3.
Now, evaluate the multiplication first: 5 + 8 - 3.
Then, evaluate everything from left to right: 13 - 3 = 10.
A2: (5 + 2) * 6 / 3
Evaluate the parenthesis: 7 * 6 / 3.
Next, evaluate from left to right: 42 / 3 = 14.
A3: 10 / 2 + 12 / 2 * 3
First, group the multiplication/division: 10/2 + 12/2*3.
Now we'll evaluate those clumps from left to right: 5 + 18.
Finally, add to get 23.
A4: 4 * 2 + (6 + 3 * (7 - 4)) - 3 * 8
Evaluate the innermost parenthesis and group the multiplication: 4*2 + (6 + 3*3) - 3*8.
Now, evaluate the multiplication: 8 + (6 + 9) - 24.
Lastly, evaluate the parenthesis and addition/subtraction: 8 + 15 - 24 = 23 - 24 = -1.
A5: 6 + 9 * (2 + 4) - (47 + 19)
First, evaluate the parenthesis and group multiplication: 6 + 9*6 - 66.
Now, multiply and then evaluate from left to right: 6 + 54 - 66 = 60 - 66 = -6.
B1: x - 3 < y + 4
Firstly, evaluate x - 3 and y + 4 (you can put parenthesis around them if it helps you visualize it better): (x - 3) < (y + 4).
Because x equals 3 and y equals 4, we end up with 0 < 8, which is True, so the result is True or 1.
B2: (x + 7) / 5 + 4 > y * (7 + x)
Evaluate parenthesis and group multiplication/division: (10)/5 + 4 > y*(10).
Next, evaluate the multiplication/division: 2 + 4 > 40.
Clearly 6 is not greater than 40, so the result is False or 0.
B3: (x + (2 * y - x) * y <= y * 6 - 1) * 5
Group multiplication: (x + (2*y - x)*y <= y*6 - 1) * 5. Evaluate it: (x + (8 - x)*y <= 24 - 1) * 5.
Evaluate everything else: (3 + (8 - 3)*4 <= 23) * 5.
Now, we have (23 <= 23) * 5, and the relational <= operator evaluates to True, so we have 1 * 5 = 5.
B4: x + y + (x * y) >= 7 + x * (5 - 2) / (2 * y)
Substitute in your variables and group your multiplication: 3 + 4 + (3*4) >= 7 + 3*(5 - 2) / (2*4).
Evaluate parenthesis: 3 + 4 + 12 >= 7 + 3*3 / 8.
Go left to right: 19 >= 7 + 9/8.
Clearly the answer is True or 1.
B5: (x + 1 == y) * (4 + 5 / (y + 1)) - x + y
Substitute and evaluate the parenthesis first: (3 + 1 == 4) * (4 + 5/5) - 3 + 4.
3 + 1 obviously equals True, so that mini expression evaluates to 1: 1 * (4 + 1) + 1.
Finish evaluation: 5 + 1 = 6.
C1: u AND v == u OR v
This one is tricky. Relational operators come before logical operators, so it really looks like this: u AND (v == u) OR v.
Substituting in: True AND (False == True) OR False --> True AND False OR False.
Last evaluation: False OR False --> False.
C2: v == (NOT u) OR v
I think you get the idea now so I'm going to leave off the commentary and just put the steps.
False == False OR FalseFalse == FalseTrue
C3: (u AND x < y) OR (y > x * 3)
(True AND 3 < 4) OR (4 > 3*3)(True AND True) OR (4 > 9)True OR FalseTrue
C4: 2 * y - (1 - x) * (u OR v AND u)
2*4 - (1 - 3)*(True OR False AND True)8 - -2*(True AND True)8 + 2*110
C5: ((u != v) AND u) + x * y
((True != False) AND True) + 3*4(True AND True) + 121 + 1213
Bonus: x++ != y OR y-- != x
x++ != y OR y-- != x3 + 1 != 4 OR 4 - 1 != 3False OR FalseFalse