Given a number, the task is to Toggle all even bit of a number
Examples:
Input : 10 Output : 0 binary representation 1 0 1 0 after toggle 0 0 0 0 Input : 20 Output : 30 binary representation 1 0 1 0 0 after toggle 1 1 1 1 0
1. First generate a number that contains even position bits.
2. Take XOR with the original number. Note that 1 ^ 1 = 0 and 1 ^ 0 = 1.
Let’s understand this approach with below code.
// CPP code to Toggle all even // bit of a number #include <iostream> using namespace std;
// Returns a number which has all even // bits of n toggled. int evenbittogglenumber( int n)
{ // Generate number form of 101010
// ..till of same order as n
int res = 0, count = 0;
for ( int temp = n; temp > 0; temp >>= 1) {
// if bit is even then generate
// number and or with res
if (count % 2 == 1)
res |= (1 << count);
count++;
}
// return toggled number
return n ^ res;
} // Driver code int main()
{ int n = 11;
cout << evenbittogglenumber(n);
return 0;
} |
// Java code to Toggle all // even bit of a number import java.io.*;
class GFG {
// Returns a number which has
// all even bits of n toggled.
static int evenbittogglenumber( int n)
{
// Generate number form of 101010
// ..till of same order as n
int res = 0 , count = 0 ;
for ( int temp = n; temp > 0 ;
temp >>= 1 )
{
// if bit is even then generate
// number and or with res
if (count % 2 == 1 )
res |= ( 1 << count);
count++;
}
// return toggled number
return n ^ res;
}
// Driver code
public static void main(String args[])
{
int n = 11 ;
System.out.println(evenbittogglenumber(n));
}
} // This code is contributed by Nikita Tiwari. |
# Python code to Toggle all # even bit of a number # Returns a number which has all even # bits of n toggled. def evenbittogglenumber(n) :
# Generate number form of 101010
# ..till of same order as n
res = 0
count = 0
temp = n
while (temp > 0 ) :
# if bit is even then generate
# number and or with res
if (count % 2 = = 1 ) :
res = res | ( 1 << count)
count = count + 1
temp >> = 1
# return toggled number
return n ^ res
# Driver code n = 11
print (evenbittogglenumber(n))
#This code is contributed by Nikita Tiwari. |
// C# code to Toggle all // even bit of a number using System;
class GFG {
// Returns a number which has
// all even bits of n toggled.
static int evenbittogglenumber( int n)
{
// Generate number form of 101010
// ..till of same order as n
int res = 0, count = 0;
for ( int temp = n; temp > 0;
temp >>= 1)
{
// if bit is even then generate
// number and or with res
if (count % 2 == 1)
res |= (1 << count);
count++;
}
// return toggled number
return n ^ res;
}
// Driver code
public static void Main()
{
int n = 11;
Console.WriteLine(evenbittogglenumber(n));
}
} // This code is contributed by Anant Agarwal. |
<?php // php code to Toggle all // even bit of a number // Returns a number which has // all even bits of n toggled. function evenbittogglenumber( $n )
{ // Generate number form of 101010
// ..till of same order as n
$res = 0;
$count = 0;
for ( $temp = $n ; $temp > 0; $temp >>= 1)
{
// if bit is even then generate
// number and or with res
if ( $count % 2 == 1)
$res |= (1 << $count );
$count ++;
}
// return toggled number
return $n ^ $res ;
} // Driver code
$n = 11;
echo evenbittogglenumber( $n );
// This code is contributed by mits ?> |
<script> // JavaScript program to Toggle all // even bit of a number // Returns a number which has
// all even bits of n toggled.
function evenbittogglenumber(n)
{
// Generate number form of 101010
// ..till of same order as n
let res = 0, count = 0;
for (let temp = n; temp > 0;
temp >>= 1)
{
// if bit is even then generate
// number and or with res
if (count % 2 == 1)
res |= (1 << count);
count++;
}
// return toggled number
return n ^ res;
}
// Driver code let n = 11;
document.write(evenbittogglenumber(n));
</script> |
1
Time Complexity : O(log n)
Auxiliary Space: O(1)
Another Approach:
To toggle a bit, we can take XOR of 1 and that bit (as 1 ^ 1 = 0, and 1 ^ 0 = 1). Therefore, to set all odd bits of an n bit number, we need to use a bit mask which is an n bit binary number with all odd bits set. This mask can be generated in 1 step using the formula of sum of a geometric progression, as an n bit number …1010 is equal to 21 + 23 + 25 + …. 2 (n – !(n % 1)) .
//C++ implementation of the approach #include <bits/stdc++.h> using namespace std;
//function to toggle all the even bits long long int evenbittogglenumber( long long int n) {
//calculating number of bits using log
int numOfBits = 1 + ( int )log2(n);
//if there is only one bit,
if (numOfBits == 1)
return n;
//calculating the max power of GP series
int m = (numOfBits / 2);
//calculating mask using GP sum
//which is a(r ^ n - 1) / (r - 1)
//where a = 2, r = 4, n = m
int mask = 2 * ( pow (4, m) - 1) / 3;
//toggling all even bits using mask ^ n
return mask ^ n;
}
// Driver code int main()
{ int n = 11;
//function call
cout << evenbittogglenumber(n);
return 0;
} //this code is contributed by phasing17 |
import java.lang.Math;
public class Main {
// function to toggle all the even bits
public static long evenBitToggleNumber( long n) {
// calculating number of bits using log
int numOfBits = 1 + ( int ) (Math.log(n) / Math.log( 2 ));
// if there is only one bit,
if (numOfBits == 1 )
return n;
// calculating the max power of GP series
int m = (numOfBits / 2 );
// calculating mask using GP sum
// which is a(r ^ n - 1) / (r - 1)
// where a = 2, r = 4, n = m
long mask = 2 * (( long ) Math.pow( 4 , m) - 1 ) / 3 ;
// toggling all even bits using mask ^ n
return mask ^ n;
}
// Main function
public static void main(String[] args) {
long n = 11 ;
// function call
System.out.println(evenBitToggleNumber(n));
}
} |
# Python implementation of the approach import math
# function to toggle all the even bits def even_bit_toggle_number(n):
# calculating number of bits using log
num_of_bits = 1 + int (math.log2(n))
# if there is only one bit, return n
if num_of_bits = = 1 :
return n
# calculating the max power of GP series
m = num_of_bits / / 2
# calculating mask using GP sum
# which is a(r ^ n - 1) / (r - 1)
# where a = 2, r = 4, n = m
mask = int ( 2 * (( 4 * * m) - 1 ) / 3 )
# toggling all even bits using mask ^ n
return mask ^ n
# Driver code n = 11
# function call print (even_bit_toggle_number(n))
|
// C# implementation of the approach using System;
class GFG {
// function to toggle all the even bits
static int evenbittogglenumber( int n)
{
// calculating number of bits using log
int numOfBits
= 1 + ( int )(Math.Log(n) / Math.Log(2));
// if there is only one bit,
if (numOfBits == 1)
return n;
// calculating the max power of GP series
int m = (numOfBits / 2);
// calculating mask using GP sum
// which is a(r ^ n - 1) / (r - 1)
// where a = 2, r = 4, n = m
int mask = 2 * ( int )(Math.Pow(4, m) - 1) / 3;
// toggling all even bits using mask ^ n
return mask ^ n;
}
// Driver code
public static void Main( string [] args)
{
int n = 11;
// Function call
Console.WriteLine(evenbittogglenumber(n));
}
} // This code is contributed by phasing17 |
//JavaScript implementation of the approach //function to toggle all the even bits function evenbittogglenumber(n) {
//calculating number of bits using log
let numOfBits = 1 + Math.floor(Math.log2(n));
//if there is only one bit,
if (numOfBits == 1)
return n;
//calculating the max power of GP series
let m = Math.floor(numOfBits / 2);
//calculating mask using GP sum
//which is a(r ^ n - 1) / (r - 1)
//where a = 2, r = 4, n = m
let mask = Math.floor(2 * (Math.pow(4, m) - 1) / 3);
//toggling all even bits using mask ^ n
return mask ^ n;
}
// Driver code let n = 11; //function call console.log(evenbittogglenumber(n)); //this code is contributed by phasing17 |
1
Time Complexity : O(1)
Auxiliary Space: O(1)