简体   繁体   中英

Confusion about operator precedence in C

I got bit confused by how to interpret the precedence of operators in the following snippet:

int a,b,c,d;
a=b=c=d=1;
a=++b>1 || ++c>1 && ++d>1

The values of a,b,c,d at the end of this code snippet are 1,2,1,1 respectively. I was trying to decipher what was happening here but to no avail.

I know the precedence of ++ is higher than any other operators so why b,c, and d doesn't equal 2? According to the result I received, I guess that the expression was evaluated left to right when at the first step b is incremented to 2 therefore ++b>1 is true then because there is a logical OR the answer is returned immediately. Like if it was : (++b>1) || (++c>1 && ++d>1)

Does operator precedence have any other role other than to group operands together? What does it have to do with the order of execution for example?

The reason is because of Short-circuit evaluation which means that the evaluation will stop as soon as one condition is evaluated true (counting from the left).

This:

a=++b>1 || ++c>1 && ++d>1

is therefore similar to this:

if(++b > 1) {
    a = true;
} else if(++c > 1) {
    if(++d > 1) {
        a = true;
    }
} 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM