Add 1 to a given number - GeeksforGeeks

01 Nov, 2021
Write a program to add one to a given number. The use of operators like ‘+’, ‘-‘, ‘*’, ‘/’, ‘++’, ‘–‘ ...etc are not allowed. Examples:  
Input:  12
Output: 13

Input:  6
Output: 7
This question can be approached by using some bit magic. Following are different methods to achieve the same using bitwise operators.Method 1 To add 1 to a number x (say 0011000111), flip all the bits after the rightmost 0 bit (we get 0011000000). Finally, flip the rightmost 0 bit also (we get 0011001000) to get the answer.  
C++
C
Java
Python3
C#
PHP
Javascript
// C++ code to add add// one to a given number#include <bits/stdc++.h>using namespace std; int addOne(int x){    int m = 1;         // Flip all the set bits    // until we find a 0    while( x & m )    {        x = x ^ m;        m <<= 1;    }         // flip the rightmost 0 bit    x = x ^ m;    return x;} /* Driver program to test above functions*/int main(){    cout<<addOne(13);    return 0;} // This code is contributed by rathbhupendra
// C++ code to add add// one to a given number#include <stdio.h> int addOne(int x){    int m = 1;         // Flip all the set bits    // until we find a 0    while( x & m )    {        x = x ^ m;        m <<= 1;    }         // flip the rightmost 0 bit    x = x ^ m;    return x;} /* Driver program to test above functions*/int main(){    printf("%d", addOne(13));    getchar();    return 0;}
// Java code to add add// one to a given numberclass GFG {     static int addOne(int x)    {        int m = 1;                 // Flip all the set bits        // until we find a 0        while( (int)(x & m) >= 1)        {            x = x ^ m;            m <<= 1;        }             // flip the rightmost 0 bit        x = x ^ m;        return x;    }         /* Driver program to test above functions*/    public static void main(String[] args)    {        System.out.println(addOne(13));    }} // This code is contributed by prerna saini.
# Python3 code to add 1# one to a given numberdef addOne(x) :         m = 1;    # Flip all the set bits    # until we find a 0    while(x & m):        x = x ^ m        m <<= 1         # flip the rightmost    # 0 bit    x = x ^ m    return x # Driver programn = 13print addOne(n) # This code is contributed by Prerna Saini.
// C# code to add one// to a given numberusing System; class GFG {     static int addOne(int x)    {        int m = 1;                 // Flip all the set bits        // until we find a 0        while( (int)(x & m) == 1)        {            x = x ^ m;            m <<= 1;        }             // flip the rightmost 0 bit        x = x ^ m;        return x;    }         // Driver code    public static void Main()    {        Console.WriteLine(addOne(13));    }} // This code is contributed by vt_m.
<?php// PHP code to add add// one to a given number  function addOne($x){    $m = 1;         // Flip all the set bits    // until we find a 0    while( $x & $m )    {        $x = $x ^ $m;        $m <<= 1;    }         // flip the rightmost 0 bit    $x = $x ^ $m;    return $x;} // Driver Codeecho addOne(13); // This code is contributed by vt_m.?>
<script>// JavaScript code to add add// one to a given number function addOne( x) {    let m = 1;         // Flip all the set bits    // until we find a 0    while( x & m ) {        x = x ^ m;        m <<= 1;    }         // flip the rightmost 0 bit    x = x ^ m;    return x;} /* Driver program to test above functions*/document.write(addOne(13));</script>
Output:  
14
Time Complexity: O(log2n)
Auxiliary Space: O(1)
Method 2 We know that the negative number is represented in 2’s complement form on most of the architectures. We have the following lemma hold for 2’s complement representation of signed numbers.Say, x is numerical value of a number, then~x = -(x+1) [ ~ is for bitwise complement ](x + 1) is due to the addition of 1 in 2’s complement conversionTo get (x + 1) apply negation once again. So, the final expression becomes (-(~x)).  
C++
C
Java
Python3
C#
PHP
Javascript
#include <bits/stdc++.h>using namespace std; int addOne(int x){    return (-(~x));} /* Driver code*/int main(){    cout<<addOne(13);    return 0;}  // This code is contributed by rathbhupendra
#include<stdio.h> int addOne(int x){   return (-(~x));} /* Driver program to test above functions*/int main(){  printf("%d", addOne(13));  getchar();  return 0;}
// Java code to Add 1 to a given numberclass GFG{    static int addOne(int x)    {         return (-(~x));    }         // Driver program    public static void main(String[] args)    {        System.out.printf("%d", addOne(13));    }} // This code is contributed// by Smitha Dinesh Semwal
# Python3 code to add 1 to a given number def addOne(x):    return (-(~x));  # Driver programprint(addOne(13)) # This code is contributed by Smitha Dinesh Semwal
// C# code to Add 1// to a given numberusing System; class GFG{    static int addOne(int x)    {        return (-(~x));    }         // Driver program    public static void Main()    {        Console.WriteLine(addOne(13));    }} // This code is contributed by vt_m.
<?php// PHP Code to Add 1// to a given number function addOne($x){return (-(~$x));} // Driver Codeecho addOne(13); // This code is contributed by vt_m.?>
<script>// JavaScript program for the above approachfunction addOne(x){    return (-(~x));} // Driver Code    document.write(addOne(13)); // This code is contributed by susmitakundugoaldanga.</script>
Output:  
14
Time Complexity: O(1)
Auxiliary Space: O(1)
Example :  
Assume the machine word length is one *nibble* for simplicity.
And x = 2 (0010),
~x = ~2 = 1101 (13 numerical)
-~x = -1101
Interpreting bits 1101 in 2’s complement form yields numerical value as -(2^4 – 13) = -3. Applying ‘-‘ on the result leaves 3. The same analogy holds for decrement. Note that this method works only if the numbers are stored in 2’s complement form. 
 
vt_m
rathbhupendra
mfkasim
susmitakundugoaldanga
rohitsingh07052
souravmahato348
Bit Magic
Bit Magic
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
Cyclic Redundancy Check and Modulo-2 Division
Little and Big Endian Mystery
Binary representation of a given number
Program to find whether a given number is power of 2
Josephus problem | Set 1 (A O(n) Solution)
Find the element that appears once
Bits manipulation (Important tactics)
Set, Clear and Toggle a given bit of a number in C
Bit Fields in C
C++ bitset and its application