Increment and Decrement Operators in C
Last updated on July 27, 2020
C has two special unary operators called increment (++
) and decrement (--
) operators. These operators increment and decrement value of a variable by 1
.
++x
is same as x = x + 1
or x += 1
--x
is same as x = x - 1
or x -= 1
Increment and decrement operators can be used only with variables. They can't be used with constants or expressions.
1 2 3 4 5 6 7 | int x = 1, y = 1;
++x; // valid
++5; // invalid - increment operator operating on a constant value
++(x+y); // invalid - increment operating on an expression
|
Increment/Decrement operators are of two types:
- Prefix increment/decrement operator.
- Postfix increment/decrement operator.
Let's start with the first one.
Prefix increment/decrement operator #
The prefix increment/decrement operator immediately increases or decreases the current value of the variable. This value is then used in the expression. Let's take an example:
y = ++x;
Here first, the current value of x
is incremented by 1
. The new value of x
is then assigned to y
. Similarly, in the statement:
y = --x;
the current value of x
is decremented by 1
. The new value of x
is then assigned to y
.
The following program demonstrates prefix increment/decrement operator in action:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | #include<stdio.h>
int main()
{
int x = 12, y = 1;
printf("Initial value of x = %d\n", x); // print the initial value of x
printf("Initial value of y = %d\n\n", y); // print the initial value of y
y = ++x; // increment the value of x by 1 then assign this new value to y
printf("After incrementing by 1: x = %d\n", x);
printf("y = %d\n\n", y);
y = --x; // decrement the value of x by 1 then assign this new value to y
printf("After decrementing by 1: x = %d\n", x);
printf("y = %d\n\n", y);
// Signal to operating system everything works fine
return 0;
}
|
Expected Output:
1 2 3 4 5 6 7 8 | Initial value of x = 12
Initial value of y = 1
After incrementing by 1: x = 13
y = 13
After decrementing by 1: x = 12
y = 12
|
Postfix Increment/Decrement operator #
The postfix increment/decrement operator causes the current value of the variable to be used in the expression, then the value is incremented or decremented. For example:
y = x++;
Here first, the current value of x
is assigned to y
then x
is incremented.
Similarly, in the statement:
y = x--;
the current value of x
is assigned to y
then x
is decremented.
The following program demonstrates postfix increment/decrement operator in action:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | #include<stdio.h>
int main()
{
int x = 12, y = 1;
printf("Initial value of x = %d\n", x); // print the initial value of x
printf("Initial value of y = %d\n\n", y); // print the initial value of y
y = x++; // use the current value of x then increment it by 1
printf("After incrementing by 1: x = %d\n", x);
printf("y = %d\n\n", y);
y = x--; // use the current value of x then decrement it by 1
printf("After decrementing by 1: x = %d\n", x);
printf("y = %d\n\n", y);
// Signal to operating system everything works fine
return 0;
}
|
Expected Output:
1 2 3 4 5 6 7 8 | Initial value of x = 12
Initial value of y = 1
After incrementing by 1: x = 13
y = 12
After decrementing by 1: x = 12
y = 13
|
Precedence #
The increment and decrement operators have higher precedence than the operators we have discussed so far (with the only exception being the parentheses). Further, Postfix increment/decrement operators have higher precedence than the prefix increment/decrement operators.
The following table lists the precedence and associativity of operators we have discussed so far:
Operators | Description | Associativity |
---|---|---|
() |
parentheses | left to right |
++ , -- |
postfix increment operator, postfix decrement operator | left to right |
++ , -- , + , - |
prefix increment operator, prefix decrement operator, unary plus, unary minus | right to left |
* , / , % |
Multiplication, Division and Modulus | left to right |
+ , - |
Addition and Subtraction | left to right |
= , += , -= , *= , /= , %= |
Assignment Operator and Compound assignment operator | right to left |
Let's take some expression and solve them on the basis of operator precedence.
Example 1:
1 2 3 4 | int x, y, z;
x = 5;
y = 8;
z = ++x + y++;
|
Solution:
Step 1: Evaluate y++
. Since ++
is postfix, the current value of y
will be used in the expression and then it will be incremented.
z = ++x + 8;
Step 2: Evaluate ++x
. Since ++
is prefix, the value of x
will be incremented immediately.
z = 6 + 8;
Step 3: Evaluate 6 + 8
.
z = 14;
Example 2:
1 2 3 4 5 | int a, b, c;
a = 10;
b = 20;
c = 1;
c += a++ * 5 - --b;
|
Solution:
Step 1: Evaluate a++
. Since ++
is postfix, the current value of a
will be used in the expression then it will be incremented. The expression now becomes:
c += 10 * 5 - --b;
Step 2: Evaluate --b
. Since --
is prefix, the value of b
will be decremented immediately. The expression now becomes:
c += 10 * 5 - 19;
Step 3: Evaluate 10 * 5
.
c += 50 - 19;
Step 4: Evaluate 50 - 19
.
c += 31;
Step 5: Evaluate +=
.
c = 32;
Load Comments