• Software
  • Leadership
  • Agile
  • Events
  • Other Topics
    • Finance
    • Robotics & AI
    • System Administration
    • Books
    • Life Experiences
    • Environment
  • Write and Earn
  • About Us
    • About Us
    • Our Contributors
    • Contact Us
    • Article Submission Guidelines
    • Logo demystified
  • Follow @MeJaneve
    Janeve.Me
  • Categories

    Browse through following categories for articles written by professionals.
    • Agile
      4
    • Books
      5
    • Environment
      1
    • Events and Conferences
      7
    • Featured
      15
    • Finance
      1
    • Leadership
      5
    • Life Experiences
      8
    • Robotics & AI
      1
    • Software
      29
    • System Administration
      2
  • Software
  • Leadership
  • Agile
  • Events
  • Other Topics
    • Finance
    • Robotics & AI
    • System Administration
    • Books
    • Life Experiences
    • Environment
  • Write and Earn
  • About Us
    • About Us
    • Our Contributors
    • Contact Us
    • Article Submission Guidelines
    • Logo demystified
Home » Software

Magic of Increment and Decrement Operators

Janeve George Posted On February 4, 2009
0
876 Views


0
Shares
  • Share On Facebook
  • Tweet It

SoftwareProgramming

I have spent a lot of time trying to understand the true funda of increment\decrement operators during my graduation. During campus recruitment there was always at least one question that asked for the output of an expression that consisted a mixture of increment and decrement operators. Everyone knows these operators  increment or decrement the value of a variable by 1.

++i is a pre-increment operator
i++ is a post-increment operator
–i is a pre-decrement operator
i– is a post-decrement operator

These are quite clear since they are bare basics. Here I am sharing a strategy I have adopted to review code (specifically java code) and find the final value without running any code.

Increment operators in an expression

Now let us consider how to understand how the operators will behave in an expression. Let us start with simplest of all first. Study the code below.

int i = 0;
int j = 0;

i = i++;
j = ++j;

The value of i and j will be 0 and 1 respectively. Let us now take a little more difficult example. Consider the following code.

int i = 0;

i = i++ + ++i + ++i;

Now this is quite difficult to evaluate. Now let us try to see how we can figure out the final value of i without executing the code. I have a small technique of mine (probably adopted by many other java gurus out there long time back). I first go from left to right in the expression (after the assignment operator). Only a small list of rules:

  1. Replace the pre operators with the modified value.
  2. Replace the post operators with the un-modified value.
  3. Keep track of the modification happened to the variable.

Now let us take the code and evaluate it. The blue color is a marker to see the progress.

Expression Value of i
i = i++ + ++i + ++i; 0
 i = 0 + ++i + ++i; 1
 i = 0 + 2 + ++i; 2
 i = 0 + 2 + 3; 3
 Final Value = “0 + 2 + 3″ 5

The modified value will be the value of i mentioned in the same row and the unmodified value will be the value of i in the previous row.

Note: In case there are more than one variable associated, add new columns to track those additional variables.
Note: This strategy might not be correct in case of other programming languages. In most cases, this will do fine.

Let us try the same for the following code.

int i = 0;

i = i++ + i++ + ++i + ++i + i++ + i++;

Now the evaluation goes like this:

Expression Value of i
i = i++ + i++ + ++i + ++i + i++ + i++; 0
i = 0 + i++ + ++i + ++i + i++ + i++; 1
i = 0 + 1 + ++i + ++i + i++ + i++; 2
i = 0 + 1 + 3 + ++i + i++ + i++; 3
i = 0 + 1 + 3 + 4 + i++ + i++; 4
i = 0 + 1 + 3 + 4 + 4 + i++;  5
i = 0 + 1 + 3 + 4 + 4 + 5;  6
Final Value = “0 + 1 + 3 + 4 + 4 + 5″  17

Decrement operators in an expression

We can apply the same rules on the decrement operator also. Let’s lake a simple example.

int i = 10;

i = --i + i-- + --i;

Now let’s analyze the above code.

Expression Value of i
i = –i + i– + –i; 10
i = 9 + i– + –i; 9
i = 9 + 9 + –i; 8
i = 9 + 9 + 7; 7
Final Value = “9 + 9 + 7″ 25

That’s cool, isn’t it.

More complex expressions

We can use the same strategy for more complex expressions. Consider the following code.

int i = 5;

i = --i - i++ + ++i * --i * i-- + i++;

Let’s evaluate this code.

Expression Value of i
i = –i – i++ + ++i * –i * i– + i++; 5
i = 4 – i++ + ++i * –i * i– + i++; 4
i = 4 – 4 + ++i * –i * i– + i++; 5
i = 4 – 4 + 6 * –i * i– + i++; 6
i = 4 – 4 + 6 * 5 * i– + i++; 5
i = 4 – 4 + 6 * 5 * 5 + i++; 4
i = 4 – 4 + 6 * 5 * 5 + 4; 5
Final Value = “4 – 4 + 6 * 5 * 5 + 4″ 154

Multiple variables in an expression

Now let us see how to handle multiple variables. Consider the following code.

int i = 5;  int j = 10;

i = --i + ++j * --i * j-- + i++ - ++j;

As I have mentioned earlier, there will be separate columns for tracking values of i and j.

Expression Value of i Value of j
i = –i + ++j * –i * j– + i++ – ++j; 5  10
i = 4 + ++j * –i * j– + i++ – ++j; 4  10
i = 4 + 11 * –i * j– + i++ – ++j; 4  11
i = 4 + 11 * 3 * j– + i++ – ++j; 3  11
i = 4 + 11 * 3 * 11 + i++ – ++j; 3  10
i = 4 + 11 * 3 * 11 + 3 – ++j; 4  10
i = 4 + 11 * 3 * 11 + 3 – 11; 4  11
Final Value = “4 + 11 * 3 * 11 + 3 – 11″ 359  11

Try Yourself

Now try some of these expressions, and of course in your spare time

Consider initial value of i and j as 25 and 10 respectively.

i = i++ * ++i / –i * i++ * i++ + –i * –i;
i = ++i / ++i * i++ * –i * –i + i++ * i–;
i = ++i * ++i * i++ * –i;
i = ++i + ++j + i++ / –j * j++;
i = ++i + ++j + j++ + –i * ++j + j–;

 

Post Views: 876
0
Shares
  • Share On Facebook
  • Tweet It




Author

Janeve George

A Technology Leader, Software Engineer, and an Agile Methodologies enthusiast. Currently, working as Manager - Product Development with MediaKind India Pvt. Ltd. (previously Ericsson Media Solutions). He has more than a decade of experience spanning different verticals predominated by hosting, cloud and media delivery technologies.

Trending Now
Toolbox for System Designers
Janeve George March 6, 2020
The Standardized HTTP Client API in Java SE 11
Janeve George March 21, 2020
Seven Habits of Effectiveness
Read Next

Seven Habits of Effectiveness

  • Follow @MeJaneve
    Janeve.Me
  • Categories

    Browse through following categories for articles written by professionals.
    • Agile
      4
    • Books
      5
    • Environment
      1
    • Events and Conferences
      7
    • Featured
      15
    • Finance
      1
    • Leadership
      5
    • Life Experiences
      8
    • Robotics & AI
      1
    • Software
      29
    • System Administration
      2

  • Popular Posts

    • Scrum Roles and Responsibilities (41,755 Views)
    • Class.forName() and DriverManager.getConnection() (12,268 Views)
    • Daily Stand-up: What, How, Who and When. (11,255 Views)
    • Which Java collection to use? (11,013 Views)
  • Recent Posts

    • The Java Stream API
    • Functional Interfaces in Java
    • Online Webinar: Students & New Technology - 28th July 2020
    • Modular Programming in Java
  • Keep In Touch

    Follow us on social media to get latest articles on Programming, System Architecture, Agile Development Methodologies, Product and Project Management, Personal Development, BigData, Robotics, Upcoming Events and more...


Copyright © 2020 | Janeve.Me. All rights Reserved.
Press enter/return to begin your search