Open In App

Toggle all even bits of a number

Last Updated : 07 Mar, 2023
Comments
Improve
Suggest changes
Like Article
Like
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)


 


Next Article
Article Tags :
Practice Tags :

Similar Reads