```
int a = 0, b= 1, c = 1;
if (c-- || ++a && b--)
```

I know that the precedence for && is the highest here. So what happens? Does it start from && and then looks at the expression on its left which is (c– || ++a) and evaluates that first?

I have been experimenting for a while with different expressions and I just can’t wrap my head around it. Thanks in advance.

Edit: I would have used parenthesis if I could but this is a uni question so I don’t really have a say

### >Solution :

Operator precedence does not directly influence evaluation order. What it does do is dictate how operands are groups. And since `&&`

has higher precedence than `||`

as you noted, your expression is equivalent to:

```
(c-- || (++a && b--))
```

Given that the `&&`

operator uses short circuit evaluation, `++a`

would be evaluated before `++b`

. However, the entire subexpression `++a && b--`

is the right side of the `||`

operator which also uses short circuit evaluation, which means the left side, i.e. `c--`

would get evaluated first.

Since `c--`

evaluates to 1, the right side of the `||`

operator, i.e. `++a && b--`

, is not evaluated. So `c`

gets decremented and `a`

and `b`

are left unchanged.