Open In App

Toggle all even bits of a number

Improve
Improve
Like Article
Like
Save
Share
Report

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. 
 

C++




// 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




// 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.


Python3




# 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#




// 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
// 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
?>


Javascript




<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>


Output

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++




//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


Java




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));
    }
}


Python3




# 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#




// 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




//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


Output

1

Time Complexity : O(1)

Auxiliary Space: O(1)

 



Last Updated : 07 Mar, 2023
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads