Given a number, the task is to toggle bits of the number except the first and the last bit.
Examples:
Input : 10 Output : 12 Binary representation:- 1 0 1 0 After toggling first and last : 1 1 0 0 Input : 9 Output : 15 Binary representation : 1 0 0 1 After toggling first and last : 1 1 1 1
Prerequisite: Find most significant set bit of a number
- Generate a number that contains the middle bit as a set. We need to change all middle bits to 1 and keep corner bits as
- The answer is XOR of generated number and original number. Note that XOR of 1 with a number toggles the number.
// C++ Program to toggle bits // except first and last bit #include<iostream> using namespace std;
// return set middle bits int setmiddlebits( int n)
{ // set all bit
n |= n >> 1;
n |= n >> 2;
n |= n >> 4;
n |= n >> 8;
n |= n >> 16;
// return middle set bits
// shift by 1 and xor with 1
return (n >> 1) ^ 1;
} int togglemiddlebits( int n)
{ // if number is 1 then
// simply return
if (n == 1)
return 1;
// xor with
// middle bits
return n ^ setmiddlebits(n);
} // Driver Code int main()
{ // Given number
int n = 9;
// print toggle bits
cout<<togglemiddlebits(n);
return 0;
} |
// Java program for toggle bits // expect first and last bit import java.io.*;
class GFG {
// return set middle bits
static int setmiddlebits( int n)
{
// set all bit
n |= n >> 1 ;
n |= n >> 2 ;
n |= n >> 4 ;
n |= n >> 8 ;
n |= n >> 16 ;
// return middle set bits
// shift by 1 and xor with 1
return (n >> 1 ) ^ 1 ;
}
static int togglemiddlebits( int n)
{
// if number is 1 then
// simply return
if (n == 1 )
return 1 ;
// XOR with middle bits
return n ^ setmiddlebits(n);
}
// Driver Code
public static void main (String[] args)
{
// Given number
int n = 9 ;
// print toggle bits
System.out.println(togglemiddlebits(n));
}
} // This code is contributed by vt_m |
# Python3 program for toggle bits # expect first and last bit # return set middle bits def setmiddlebits(n):
# set all bit
n | = n >> 1 ;
n | = n >> 2 ;
n | = n >> 4 ;
n | = n >> 8 ;
n | = n >> 16 ;
# return middle set bits
# shift by 1 and xor with 1
return (n >> 1 ) ^ 1
def togglemiddlebits(n):
# if number is 1 then simply return
if (n = = 1 ):
return 1
# xor with middle bits
return n ^ setmiddlebits(n)
# Driver code n = 9
print (togglemiddlebits(n))
# This code is contributed by Anant Agarwal. |
// C# program for toggle bits // expect first and last bit using System;
class GFG {
// return set middle bits
static int setmiddlebits( int n)
{
// set all bit
n |= n >> 1;
n |= n >> 2;
n |= n >> 4;
n |= n >> 8;
n |= n >> 16;
// return middle set bits
// shift by 1 and xor with 1
return (n >> 1) ^ 1;
}
static int togglemiddlebits( int n)
{
// if number is 1 then
// simply return
if (n == 1)
return 1;
// XOR with middle bits
return n ^ setmiddlebits(n);
}
// Driver Code
public static void Main ()
{
// Given number
int n = 9;
// print toggle bits
Console.WriteLine(togglemiddlebits(n));
}
} // This code is contributed by Anant Agarwal. |
<?php // Php Program to toggle bits // except first and last bit // return set middle bits function setmiddlebits( $n )
{ // set all bit
$n |= $n >> 1;
$n |= $n >> 2;
$n |= $n >> 4;
$n |= $n >> 8;
$n |= $n >> 16;
// return middle set bits
// shift by 1 and xor with 1
return ( $n >> 1) ^ 1;
} function togglemiddlebits( $n )
{ // if number is 1 then
// simply return
if ( $n == 1)
return 1;
// xor with
// middle bits
return $n ^ setmiddlebits( $n );
} // Driver Code
$n = 9;
// print toggle bits
echo togglemiddlebits( $n );
// This code is contributed by ajit ?> |
<script> // Javascript Program to toggle bits // except first and last bit // return set middle bits function setmiddlebits(n)
{ // set all bit
n |= n >> 1;
n |= n >> 2;
n |= n >> 4;
n |= n >> 8;
n |= n >> 16;
// return middle set bits
// shift by 1 and xor with 1
return (n >> 1) ^ 1;
} function togglemiddlebits(n)
{ // if number is 1 then
// simply return
if (n == 1)
return 1;
// xor with
// middle bits
return n ^ setmiddlebits(n);
} // Driver Code // Given number var n = 9;
// print toggle bits document.write(togglemiddlebits(n)); </script> |
15
Time Complexity: O(log2n), where n is the given number
Auxiliary Space: O(1)
Another Approach: Using bit mask
The idea to solve this problem is that we can use XOR of a specific bit with 1 to toggle the specific bit. Therefore, for an n – bit number, we can construct a bit mask of the form 0111….11110, ie, an n – bit number, where all bits are set except the first and last bit. Therefore, for a number that is greater than or equal to 4, the bit mask is equal to 2n – 2. (n can be calculated using log2number) (For numbers less than 4, there are no middle bits, therefore, the number will not be changed).
Approach:
- Calculate the bit mask = 2 log2number – 2
- Perform the XOR of the number and the mask.
Below is the implementation of the above approach:
// C++ Program to toggle bits // except first and last bit #include<bits/stdc++.h> using namespace std;
//function to toggle the middle bits //using the bit mask int togglemiddlebits( int n)
{ //if n < 4, there are no middle bits
if (n < 4)
return n;
int mask = (1 << ( int )log2(n)) - 2;
return mask ^ n;
} // Driver Code int main()
{ // Given number
int n = 9;
//Function call
cout << togglemiddlebits(n) << endl;
return 0;
} //This code is contributed by phasing17 |
// Java Program to toggle bits // except first and last bit import java.io.*;
import java.util.*;
class GFG
{ // function to toggle the middle bits
// using the bit mask
public static int togglemiddlebits( int n)
{
// if n < 4, there are no middle bits
if (n < 4 )
return n;
int mask = ( 1 << ( int )(Math.log(n) / Math.log( 2 ))) - 2 ;
return mask ^ n;
}
// Driver Code
public static void main(String[] args)
{
// Given number
int n = 9 ;
//Function call
System.out.println(togglemiddlebits(n));
}
} // this code is contributed by adityapatil12 |
# python3 Program to toggle bits # except first and last bit import math
#function to toggle the middle bits #using the bit mask def togglemiddlebits(n) :
#if n < 4, there are no middle bits
if n < 4 :
return n
mask = int (( 1 << int (math.log2( 14 ))) - 2 )
return mask ^ n
# Driver code if __name__ = = "__main__" :
# Given number
n = 9
# Function call
print (togglemiddlebits(n))
# this code is contributed by aditya942003patil |
// C# Program to toggle bits // except first and last bit using System;
class GFG {
// function to toggle the middle bits
// using the bit mask
static int togglemiddlebits( int n)
{
// if n < 4, there are no middle bits
if (n < 4)
return n;
int mask
= (1 << ( int )(Math.Log(n) / Math.Log(2))) - 2;
return mask ^ n;
}
// Driver Code
public static void Main( string [] args)
{
// Given number
int n = 9;
// Function call
Console.WriteLine(togglemiddlebits(n));
}
} // This code is contributed by phasing17 |
// JavaScript Program to toggle bits // except first and last bit //Function to toggle the middle bits //using the bit mask function togglemiddlebits(n)
{ //if n < 4, there are no middle bits
if (n < 4)
return n;
let mask = (1 << Math.floor(Math.log2(n))) - 2;
return mask ^ n;
} // Driver Code // Given number let n = 9; //Function call console.log(togglemiddlebits(n)); //This code is contributed by phasing17 |
15
Time Complexity: O(1)
Auxiliary Space: O(1)