Horje
Toggle all even bits of a number

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

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

 




Reffered: https://www.geeksforgeeks.org


Bit Magic

Related
Toggle first and last bits of a number Toggle first and last bits of a number
Check if actual binary representation of a number is palindrome Check if actual binary representation of a number is palindrome
Reverse actual bits of the given number Reverse actual bits of the given number
Odious number Odious number
Set the Left most unset bit Set the Left most unset bit

Type:
Geek
Category:
Coding
Sub Category:
Tutorial
Uploaded by:
Admin
Views:
13