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 codeint main(){    int n = 10;    cout << toggleFandLbits(n);    return 0;} | 
Java
// Java program to toggle first and last// bits of a numberimport 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 coden = 10print(toggleFandLbits(n))# This code is contributed by Nikita Tiwari. | 
C#
// C# program to toggle first and last // bits of a numberusing 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> | 
3
Time Complexity: O(1).
Auxiliary Space: O(1). 
Another Approach:
We can do this in two steps by:
To generate an bit mask for n, where only the last and first bits are set, we need to calculate 2log2n + 20
Then, just take the XOR of the mask and n.
Below is the implementation of the above approach:
C++
// CPP program to toggle first and last// bits of a number#include <bits/stdc++.h>using namespace std;//function to toggle first and last bits//of a numberint toggleFandLbits(int n){    //calculating mask    int mask = pow(2, (int)log2(n)) + 1;    //taking xor of mask and n    return mask ^ n;}// Driver codeint main(){    int n = 10;    //function call    cout << toggleFandLbits(n);    return 0;}//this code is contributed by phasing17 | 
Java
// Java program to toggle first and last// bits of a numberclass GFG{       // function to toggle first and last bits    // of a number    static int toggleFandLbits(int n)    {        // calculating mask        int mask = (int)Math.pow(                       2, (int)(Math.log(n) / Math.log(2)))                   + 1;        // taking xor of mask and n        return mask ^ n;    }    // Driver code    public static void main(String[] args)    {        int n = 10;        // Function call        System.out.println(toggleFandLbits(n));    }}// this code is contributed by phasing17 | 
Python3
# Python3 program to toggle first and last# bits of a numberfrom math import log# Function to toggle first and last bits# of a numberdef toggleFandLbits(n):    # calculating mask    mask = 2 ** (int(log(n, 2))) + 1         # taking xor of mask and n    return mask ^ n# Driver coden = 10# Function callprint(toggleFandLbits(n))# This code is contributed by phasing17 | 
C#
// C# program to toggle first and last// bits of a numberusing System;class GFG {  // function to toggle first and last bits  // of a number  static int toggleFandLbits(int n)  {    // calculating mask    int mask = (int)Math.Pow(      2, (int)(Math.Log(n) / Math.Log(2)))      + 1;    // taking xor of mask and n    return mask ^ n;  }  // Driver code  public static void Main(string[] args)  {    int n = 10;    // Function call    Console.WriteLine(toggleFandLbits(n));  }}// This code is contributed by phasing17 | 
Javascript
// JavaScript program to toggle first and last// bits of a number// function to toggle first and last bits// of a numberfunction toggleFandLbits(n){    // calculating mask    let mask = Math.pow(2, Math.floor(Math.log2(n))) + 1;         // taking xor of mask and n    return mask ^ n;}// Driver codelet  n = 10;     // function callconsole.log(toggleFandLbits(n));// This code is contributed by phasing17 | 
3
Time Complexity: O(log2(log2n)), as pow(log(n)) will be calculated to complexity will be log(log(n)).
Auxiliary Space: O(1). 
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!
