Skip to content
Related Articles

Related Articles

Toggle first and last bits of a number
  • Difficulty Level : Hard
  • Last Updated : 08 Apr, 2021

Given a number n, the task is to toggle only first and last bits of a number
Examples : 
 

Input : 10
Output : 3
Binary representation of 10 is
1010. After toggling first and
last bits, we get 0011.

Input : 15
Output : 6

 

Prerequisite : Find MSB of given number.
1) Generate a number which contains first and last bit as set. We need to change all middle bits to 0 and keep corner bits as 1.
2) Answer is XOR of generated number and original number. 
 

C++




// CPP program to toggle first and last
// bits of a number
#include <iostream>
using namespace std;
 
// Returns a number which has same bit
// count as n and has only first and last
// bits as set.
int takeLandFsetbits(int n)
{
    // set all the bit of the number
    n |= n >> 1;
    n |= n >> 2;
    n |= n >> 4;
    n |= n >> 8;
    n |= n >> 16;
 
    // Adding one to n now unsets
    // all bits and moves MSB to
    // one place. Now we shift
    // the number by 1 and add 1.
    return ((n + 1) >> 1) + 1;
}
 
int toggleFandLbits(int n)
{
    // if number is 1
    if (n == 1)
        return 0;
 
    // take XOR with first and
    // last set bit number
    return n ^ takeLandFsetbits(n);
}
 
// Driver code
int main()
{
    int n = 10;
    cout << toggleFandLbits(n);
    return 0;
}

Java




// Java program to toggle first and last
// bits of a number
import java.io.*;
 
class GFG {
     
    // Returns a number which has same bit
    // count as n and has only first and last
    // bits as set.
    static int takeLandFsetbits(int n)
    {
        // set all the bit of the number
        n |= n >> 1;
        n |= n >> 2;
        n |= n >> 4;
        n |= n >> 8;
        n |= n >> 16;
     
        // Adding one to n now unsets
        // all bits and moves MSB to
        // one place. Now we shift
        // the number by 1 and add 1.
        return ((n + 1) >> 1) + 1;
    }
     
    static int toggleFandLbits(int n)
    {
        // if number is 1
        if (n == 1)
            return 0;
     
        // take XOR with first and
        // last set bit number
        return n ^ takeLandFsetbits(n);
    }
     
    // Driver code
    public static void main(String args[])
    {
        int n = 10;
        System.out.println(toggleFandLbits(n));
    }
}
 
/*This code is contributed by Nikita Tiwari.*/

Python3




# Python 3 program to toggle first
# and last bits of a number.
 
 
# Returns a number which has same bit
# count as n and has only first and last
# bits as set.
def takeLandFsetbits(n) :
     
# set all the bit of the number
    n = n | n >> 1
    n = n | n >> 2
    n = n | n >> 4
    n = n | n >> 8
    n = n | n >> 16
 
    # Adding one to n now unsets
    # all bits and moves MSB to
    # one place. Now we shift
    # the number by 1 and add 1.
    return ((n + 1) >> 1) + 1
     
def toggleFandLbits(n) :
    # if number is 1
    if (n == 1) :
        return 0
 
    # take XOR with first and
    # last set bit number
    return n ^ takeLandFsetbits(n)
 
# Driver code
n = 10
print(toggleFandLbits(n))
 
# This code is contributed by Nikita Tiwari.

C#




// C# program to toggle first and last
// bits of a number
using System;
 
class GFG {
      
    // Returns a number which has same bit
    // count as n and has only first and last
    // bits as set.
    static int takeLandFsetbits(int n)
    {
        // set all the bit of the number
        n |= n >> 1;
        n |= n >> 2;
        n |= n >> 4;
        n |= n >> 8;
        n |= n >> 16;
       
        // Adding one to n now unsets
        // all bits and moves MSB to
        // one place. Now we shift
        // the number by 1 and add 1.
        return ((n + 1) >> 1) + 1;
    }
       
    static int toggleFandLbits(int n)
    {
         
        // if number is 1
        if (n == 1)
            return 0;
       
        // take XOR with first and
        // last set bit number
        return n ^ takeLandFsetbits(n);
    }
       
    // Driver code
    public static void Main()
    {
         
        int n = 10;
         
        Console.WriteLine(toggleFandLbits(n));
    }
}
  
// This code is contributed by Anant Agarwal.

PHP




<?php
// PHP program to toggle first and last
// bits of a number
 
// Returns a number which has same bit
// count as n and has only first and last
// bits as set.
function takeLandFsetbits($n)
{
    // set all the bit of the number
    $n |= $n >> 1;
    $n |= $n >> 2;
    $n |= $n >> 4;
    $n |= $n >> 8;
    $n |= $n >> 16;
 
    // Adding one to n now unsets
    // all bits and moves MSB to
    // one place. Now we shift
    // the number by 1 and add 1.
    return (($n + 1) >> 1) + 1;
}
 
function toggleFandLbits(int $n)
{
    // if number is 1
    if ($n == 1)
        return 0;
 
    // take XOR with first and
    // last set bit number
    return $n ^ takeLandFsetbits($n);
}
 
// Driver code
$n = 10;
echo toggleFandLbits($n);
 
// This code is contributed by mits
?>

Javascript




<script>
 
// JavaScript program to toggle first and last
// bits of a number
 
    // Returns a number which has same bit
    // count as n and has only first and last
    // bits as set.
    function takeLandFsetbits(n)
    {
        // set all the bit of the number
        n |= n >> 1;
        n |= n >> 2;
        n |= n >> 4;
        n |= n >> 8;
        n |= n >> 16;
        
        // Adding one to n now unsets
        // all bits and moves MSB to
        // one place. Now we shift
        // the number by 1 and add 1.
        return ((n + 1) >> 1) + 1;
    }
        
    function toggleFandLbits(n)
    {
        // if number is 1
        if (n == 1)
            return 0;
        
        // take XOR with first and
        // last set bit number
        return n ^ takeLandFsetbits(n);
    }
 
// Driver code
 
        let n = 10;
        document.write(toggleFandLbits(n));
 
</script>

Output : 

3

Time Complexity is O(1).
 




My Personal Notes arrow_drop_up
Recommended Articles
Page :