Surabaya
Surabaya

Reputation: 5

Increment and Decrement Operators Work Logic

I know If the operator is placed before the operand, referred to as the pre-increment operator and the pre-decrement operator,then the operator is applied first and the value return is the new value of the expression.

Alternatively,if the operator is placed after the operand, referred to as the post-increment operator and the post-decrement operator,then the original value of the expression is returned,with operator applied after the value is returned.

But i dont understand below codes output.

//CODE FRAGMENT A

int value1 = 3;
int value2 = ++value1 * 5 / value1-- + --value1;
//  value2 =  4 * 5 / value1-- + --value1;
//  value2 =  4 * 5 / 4 + --value1;
//  value2 =  4 * 5 / 4 + 2;
//  value2 =  20 / 4 + 2;
//  value2 =  5 + 2;
//  value2 = 7;

// CODE FRAGMENT B

int var1 = 10;
var1 = var1++ + var1 + var1-- - var1-- + ++var1;
// var1 = 10  + 11   +  11    -  10    +  10;
// var1 = 32

// CODE FRAGMENT C

int var2 = 5;
var2 += var2 + var2 + ++var2; 
// var2 = var2 + var2 + var2 + ++var2;
// var2 =  5   +  5   +  5   +   6;
// var2 = 10 + 5 + 6;
// var2 = 15 + 6;
// var2 = 21;

I know top priority operator post-unary operator and pre-unary operators but i dont understand 'CODE FRAGMENT B & CODE FRAGMENT C' situation.Why this situation is not evaluated as follows ?

// CODE FRAGMENT B
int var1 = 10;
var1 = var1++ + var1 + var1-- - var1-- + ++var1;
// var1 = 10  + var1 +  11    -  10     +  10
// var1 = 10  +  10  +  11    -  10     +  10
// var1 = 20  + 11 - 10 + 10
// var1 = 31 -10 + 10
// var1 = 21 + 10
// var1 = 31

// CODE FRAGMENT C
int var2 = 5;
var2 += var2 + var2 + ++var2; 
// var2 = var2 + var2 + var2 + ++var2;
// var2 = var2 + var2 + var2 +  6;
// var2 =  6   +  6   +  6   +  6;
// var2 = 12 + 6 + 6;
// var2 = 18 + 6;
// var2 = 24;

Upvotes: 0

Views: 105

Answers (1)

Andreas
Andreas

Reputation: 159086

Here is the logic for code fragment B, showing the updated value of var1 in parentheses.

int var1 = 10;
var1 = var1++ + var1 + var1-- - var1-- + ++var1;
       var1++ = 10  (var1 = 11)
var1 =   10   + var1 + var1-- - var1-- + ++var1;
                var1 = 11  (var1 = 11)
var1 =   10   +  11  + var1-- - var1-- + ++var1;
var1 =       21      + var1-- - var1-- + ++var1;
                       var1-- = 11  (var1 = 10)
var1 =       21      +   11   - var1-- + ++var1;
var1 =             32         - var1-- + ++var1;
                                var1-- = 10  (var1 = 9)
var1 =             32         -   10   + ++var1;
var1 =                 22              + ++var1;
                                         ++var1 = 10  (var1 = 10)
var1 =                 22              +   10  ;
var1 =                    32                   ;
32  (var1 = 32);

Upvotes: 1

Related Questions