Home > Net >  Misunderstood Operators Precedence in C
Misunderstood Operators Precedence in C

Time:03-31

I was doing some exercises on the order of execution of operations in C and I came across a case that I did not quite understand.

int d = 1;
int e = d--/10;     // the result of e will be 0;

before calculating the value of "e", we decremented the "d" then we did the division.

on the other hand in "f", we made the division before decrementing the "d"!

int d = 1;
int f = 10/d--;     // the result of f will be: 10

My question is: why there is a differentiation in the value of "d" used knowing that in both cases the decrementation of "d" is a post-decrement?

CodePudding user response:

There's actually no difference. It uses d=1 and does a post-decrement in both cases.

The reason you see an apparent difference is that you're doing integer division, which rounds towards 0. That is: (int)1 / (int)10 = 0.

See the accepted answer on What is the behavior of integer division?

CodePudding user response:

For

int e = d--/10;

You say

before calculating the value of "e", we decremented the "d" then we did the division.

And this is the main source of your confusion. value of d was decremented after using it in division. It doesn't matter if it was in the expression before division, it is still post-decrement, and will happen after using the original value.

You are also doing interger division, which rounds towards zero, which may add to your confusion.

And in anticipation of possible follow-up question/experiment: if you have several post- or pre-increment or decrement operators in same expression for same variable, what actually happens is undefined. So just don't do that, results may change depending on compiler and optimization and whatnot.

  • Related