Open In App

Increment a number by one by manipulating the bits

Last Updated : 15 Jun, 2022
Improve
Improve
Like Article
Like
Save
Share
Report

Given a non-negative integer n. The problem is to increment n by 1 by manipulating the bits of n.
Examples : 
 

Input : 6
Output : 7

Input : 15
Output : 16

 

Approach: Following are the steps:
 

  1. Get the position of rightmost unset bit of n. Let this position be k.
  2. Set the k-th bit of n.
  3. Toggle the last k-1 bits of n.
  4. Finally, return n.
     

 

C++




// C++ implementation to increment a number
// by one by manipulating the bits
#include <bits/stdc++.h>
using namespace std;
 
// function to find the position
// of rightmost set bit
int getPosOfRightmostSetBit(int n)
{
    return log2(n & -n);
}
 
// function to toggle the last m bits
unsigned int toggleLastKBits(unsigned int n,
                             unsigned int k)
{
    // calculating a number 'num' having 'm' bits
    // and all are set
    unsigned int num = (1 << k) - 1;
 
    // toggle the last m bits and return the number
    return (n ^ num);
}
 
// function to increment a number by one
// by manipulating the bits
unsigned int incrementByOne(unsigned int n)
{
    // get position of rightmost unset bit
    // if all bits of 'n' are set, then the
    // bit left to the MSB is the rightmost
    // unset bit
    int k = getPosOfRightmostSetBit(~n);
 
    // kth bit of n is being set by this operation
    n = ((1 << k) | n);
 
    // from the right toggle all the bits before the
    // k-th bit
    if (k != 0)
        n = toggleLastKBits(n, k);
 
    // required number
    return n;
}
 
// Driver program to test above
int main()
{
    unsigned int n = 15;
    cout << incrementByOne(n);
    return 0;
}


Java




// Java implementation to increment a number
// by one by manipulating the bits
import java.io.*;
import java.util.*;
 
class GFG {
     
    // function to find the position
    // of rightmost set bit
    static int getPosOfRightmostSetBit(int n)
    {
        return (int)(Math.log(n & -n) / Math.log(2));
    }
     
    // function to toggle the last m bits
    static int toggleLastKBits( int n, int k)
    {
        // calculating a number 'num' having
        // 'm' bits and all are set
        int num = (1 << k) - 1;
     
        // toggle the last m bits and return
        // the number
        return (n ^ num);
    }
     
    // function to increment a number by one
    // by manipulating the bits
    static int incrementByOne( int n)
    {
        // get position of rightmost unset bit
        // if all bits of 'n' are set, then the
        // bit left to the MSB is the rightmost
        // unset bit
        int k = getPosOfRightmostSetBit(~n);
     
        // kth bit of n is being set
        // by this operation
        n = ((1 << k) | n);
     
        // from the right toggle all
        // the bits before the k-th bit
        if (k != 0)
            n = toggleLastKBits(n, k);
     
        // required number
        return n;
     
    }
     
    // Driver Program   
    public static void main (String[] args)
    {
        int n = 15;
        System.out.println(incrementByOne(n));
         
    }
}
 
// This code is contributed by Gitanjali.


Python 3




# python 3 implementation
# to increment a number
# by one by manipulating
# the bits
import math
 
# function to find the
# position of rightmost
# set bit
def getPosOfRightmostSetBit(n) :
    return math.log2(n & -n)
     
 
# function to toggle the last m bits
def toggleLastKBits(n, k) :
    # calculating a number 
    # 'num' having 'm' bits
    # and all are set
    num = (1 << (int)(k)) - 1
 
    # toggle the last m bits and
    # return the number
    return (n ^ num)
 
 
# function to increment
# a number by one by
# manipulating the bits
def incrementByOne(n) :
 
    # get position of rightmost
    # unset bit if all bits of
    # 'n' are set, then the bit
    # left to the MSB is the
    # rightmost unset bit
    k = getPosOfRightmostSetBit(~n)
 
    # kth bit of n is being
    # set by this operation
    n = ((1 << (int)(k)) | n)
 
    # from the right toggle
    # all the bits before the
    # k-th bit
    if (k != 0) :
        n = toggleLastKBits(n, k)
 
    # required number
    return n
     
  
# Driver program
n = 15
print(incrementByOne(n))
 
 
# This code is contributed
# by Nikita Tiwari.


C#




// C# implementation to increment a number
// by one by manipulating the bits
using System;
 
class GFG {
     
    // function to find the position
    // of rightmost set bit
    static int getPosOfRightmostSetBit(int n)
    {
        return (int)(Math.Log(n & -n) / Math.Log(2));
    }
     
    // function to toggle the last m bits
    static int toggleLastKBits( int n, int k)
    {
         
        // calculating a number 'num' having
        // 'm' bits and all are set
        int num = (1 << k) - 1;
     
        // toggle the last m bits and return
        // the number
        return (n ^ num);
    }
     
    // function to increment a number by one
    // by manipulating the bits
    static int incrementByOne( int n)
    {
         
        // get position of rightmost unset bit
        // if all bits of 'n' are set, then the
        // bit left to the MSB is the rightmost
        // unset bit
        int k = getPosOfRightmostSetBit(~n);
     
        // kth bit of n is being set
        // by this operation
        n = ((1 << k) | n);
     
        // from the right toggle all
        // the bits before the k-th bit
        if (k != 0)
            n = toggleLastKBits(n, k);
     
        // required number
        return n;
     
    }
     
    // Driver Program
    public static void Main ()
    {
        int n = 15;
         
        Console.WriteLine(incrementByOne(n));
         
    }
}
 
// This code is contributed by Sam007.


PHP




<?php
// PHP implementation to increment a number
// by one by manipulating the bits
 
// function to find the position
// of rightmost set bit
function getPosOfRightmostSetBit($n)
{
    $t = $n & -$n;
    return log($t, 2);
}
 
// function to toggle the last m bits
function toggleLastKBits($n, $k)
{
    // calculating a number 'num'
    // having 'm' bits and all are set
    $num = (1 << $k) - 1;
 
    // toggle the last m bits and
    // return the number
    return ($n ^ $num);
}
 
// function to increment a number by one
// by manipulating the bits
function incrementByOne($n)
{
    // get position of rightmost unset bit
    // if all bits of 'n' are set, then the
    // bit left to the MSB is the rightmost
    // unset bit
    $k = getPosOfRightmostSetBit(~$n);
 
    // kth bit of n is being set
    // by this operation
    $n = ((1 << $k) | $n);
 
    // from the right toggle all the
    // bits before the k-th
    if ($k != 0)
        $n = toggleLastKBits($n, $k);
 
    // required number
    return $n;
}
 
// Driver code
$n = 15;
echo incrementByOne($n);
 
// This code is contributed by Mithun Kumar
?>


Javascript




<script>
 
// JavaScript program to increment a number
// by one by manipulating the bits
 
    // function to find the position
    // of rightmost set bit
    function getPosOfRightmostSetBit(n)
    {
        return (Math.log(n & -n) / Math.log(2));
    }
       
    // function to toggle the last m bits
    function toggleLastKBits(n, k)
    {
        // calculating a number 'num' having
        // 'm' bits and all are set
        let num = (1 << k) - 1;
       
        // toggle the last m bits and return
        // the number
        return (n ^ num);
    }
       
    // function to increment a number by one
    // by manipulating the bits
    function incrementByOne(n)
    {
        // get position of rightmost unset bit
        // if all bits of 'n' are set, then the
        // bit left to the MSB is the rightmost
        // unset bit
        let k = getPosOfRightmostSetBit(~n);
       
        // kth bit of n is being set
        // by this operation
        n = ((1 << k) | n);
       
        // from the right toggle all
        // the bits before the k-th bit
        if (k != 0)
            n = toggleLastKBits(n, k);
       
        // required number
        return n;
       
    }  
 
// Driver code
         
        let n = 15;
        document.write(incrementByOne(n));
         
</script>


Output : 

16

Time Complexity: O(1)
Space Complexity: O(1) 



Like Article
Suggest improvement
Share your thoughts in the comments

Similar Reads