Skip to content
Related Articles

Related Articles

Improve Article

Set all odd bits of a number

  • Difficulty Level : Hard
  • Last Updated : 03 May, 2021

Given a number, the task is to set all odd bits of a number. Positions of bits are counted from LSB (least significant bit) to MSB (Most significant bit). Position of LSB is considered as 1.

Examples : 

Input : 20
Output : 21
Explanation : Binary representation of 20
is 10100. Setting all odd
bits make the number 10101 which is binary
representation of 21.

Input : 10
Output : 15

Method 1 (Using OR) 
1. First generate a number that contains odd position bits. 
2. Take OR with the original number. Note that 1 | 1 = 1 and 1 | 0 = 1.

Let’s understand this approach with below code.  

C++




// CPP code Set all odd bits
// of a number
#include <iostream>
using namespace std;
 
// set all odd bit
int oddbitsetnumber(int n)
{
    int count = 0;
 
    // res for store 010101.. number
    int res = 0;
 
    // generate number form of 010101.....till
    // temp size
    for (int temp = n; temp > 0; temp >>= 1) {
 
        // if bit is odd, then generate
        // number and or with res
        if (count % 2 == 0)
            res |= (1 << count);
 
        count++;
    }
 
    return (n | res);
}
 
// Driver code
int main()
{
    int n = 10;
    cout << oddbitsetnumber(n);
    return 0;
}

Java




// Java code to Set all odd
// bits of a number
 
class GFG
{
 
    // set all odd bit
    static int oddbitsetnumber(int n)
    {
        int count = 0;
 
        // res for store 010101.. number
        int res = 0;
 
        // generate number form of
        // 010101.....till temp size
        for (int temp = n; temp > 0; temp >>= 1)
        {
 
            // if bit is odd, then generate
            // number and or with res
            if (count % 2 == 0)
                res |= (1 << count);
 
            count++;
        }
 
        return (n | res);
    }
 
    // Driver code
    public static void main(String[] args)
    {
        int n = 10;
        System.out.println(oddbitsetnumber(n));
    }
}
 
// This code is contributed
// by prerna saini

Python3




''' Python3 code Set all odd bits
   of a number'''
    
# set all odd bit
def oddbitsetnumber(n):
    count = 0
    # res for store 010101.. number
    res = 0
 
    # generate number form of 010101.....till
    # temp size
    temp = n
    while temp > 0:
 
        # if bit is odd, then generate
        # number and or with res
        if count % 2 == 0:
            res |= (1 << count)
 
        count += 1
        temp >>= 1
 
    return (n | res)
 
n = 10
print (oddbitsetnumber(n))
 
#This code is contributed by Shreyanshi Arun.

C#




// C# code to Set all odd
// bits of a number
using System;
 
class GFG
{
    static int oddbitsetnumber(int n)
    {
        int count = 0;
 
        // res for store 010101.. number
        int res = 0;
 
        // generate number form of
        // 010101.....till temp size
        for (int temp = n; temp > 0;
                           temp >>= 1)
        {
 
            // if bit is odd, then
            // generate number and
            // or with res
            if (count % 2 == 0)
                res |= (1 << count);
 
            count++;
        }
 
        return (n | res);
    }
     
    // Driver Code
    static public void Main ()
    {
        int n = 10;
        Console.WriteLine(oddbitsetnumber(n));
    }
}
 
// This code is contributed
// by prerna ajit

PHP




<?php
// php code Set all odd
// bits  of a number
 
// set all odd bit
function oddbitsetnumber($n)
{
    $count = 0;
 
    // res for store 010101..
    // number
    $res = 0;
 
    // generate number form of
    // 010101... till temp size
    for ($temp = $n; $temp > 0; $temp >>= 1)
    {
 
        // if bit is odd, then generate
        // number and or with res
        if ($count % 2 == 0)
            $res |= (1 << $count);
 
        $count++;
    }
 
    return ($n | $res);
}
 
    // Driver code
    $n = 10;
    echo oddbitsetnumber($n);
 
// This code is contributed by mits
?>

Javascript




<script>
 
// JavaScript Program to Set all odd
// bits of a number
 
    // set all odd bit
    function oddbitsetnumber(n)
    {
        let count = 0;
  
        // res for store 010101.. number
        let res = 0;
  
        // generate number form of
        // 010101.....till temp size
        for (let temp = n; temp > 0; temp >>= 1)
        {
  
            // if bit is odd, then generate
            // number and or with res
            if (count % 2 == 0)
                res |= (1 << count);
  
            count++;
        }
        return (n | res);
    }
   
// Driver Code
        let n = 10;
        document.write(oddbitsetnumber(n));
        
       // This code is contributed by chinmoy1997pal.
</script>

Output: 



15

Method 2 (A O(1) solution for 32 bit numbers) 

C++




// Efficient CPP program to set all
// odd bits number
#include <iostream>
using namespace std;
 
// return MSB set number
int getmsb(int n)
{
    // set all bits including MSB.
    n |= n >> 1;
    n |= n >> 2;
    n |= n >> 4;
    n |= n >> 8;
    n |= n >> 16;
 
    // return MSB
    return (n + 1) >> 1;
}
 
// Returns a number of same size (MSB at
// same position) as n and all odd bits
// set.
int getevenbits(int n)
{
    n = getmsb(n);
 
    // generate odd bits like 010101..
    n |= n >> 2;
    n |= n >> 4;
    n |= n >> 8;
    n |= n >> 16;
 
    // if bits is even then shift by 1
    if ((n&1) == 0)
        n = n >> 1;
     
    // return odd set bits number
    return n; 
}
 
// set all odd bits here
int setalloddbits(int n)
{   
    // take OR with odd set bits number
    return n | getevenbits(n);   
}
 
// Driver code
int main()
{
    int n = 10;
    cout << setalloddbits(n);
    return 0;
}

Java




// Efficient Java program to set
// all odd bits number
class GFG {
 
    // return MSB set number
    static int getmsb(int n)
    {
        // set all bits including MSB.
        n |= n >> 1;
        n |= n >> 2;
        n |= n >> 4;
        n |= n >> 8;
        n |= n >> 16;
 
        // return MSB
        return (n + 1) >> 1;
    }
 
    // Returns a number of same
    // size (MSB at same position)
    // as n and all odd bits set.
    static int getevenbits(int n)
    {
        n = getmsb(n);
 
        // generate odd bits
        // like 010101..
        n |= n >> 2;
        n |= n >> 4;
        n |= n >> 8;
        n |= n >> 16;
 
        // if bits is even
        // then shift by 1
        if ((n & 1) == 0)
            n = n >> 1;
 
        // return odd set bits number
        return n;
    }
 
    // set all odd bits here
    static int setalloddbits(int n)
    {
        // take OR with odd
        // set bits number
        return n | getevenbits(n);
    }
 
    // Driver code
    public static void main(String[] args)
    {
        int n = 10;
        System.out.println(setalloddbits(n));
    }
}
 
// This code is contributed
// by prerna saini

Python3




# Efficient python3 program to 
# set all odd bits number
import math
 
# return MSB set number
def getmsb( n):
 
    # set all bits including MSB.
    n |= n >> 1
    n |= n >> 2
    n |= n >> 4
    n |= n >> 8
    n |= n >> 16
 
    # return MSB
    return (n + 1) >> 1
 
 
# Returns a number of same
# size (MSB at same position)
# as n and all odd bits set.
def getevenbits(n):
 
    n = getmsb(n)
 
    # generate odd bits
    # like 010101..
    n |= n >> 2
    n |= n >> 4
    n |= n >> 8
    n |= n >> 16
 
    # if bits is even
    # then shift by 1
    if ((n & 1) == 0):
        n = n >> 1
     
    # return odd set bits number
    return n
 
 
# set all odd bits here
def setalloddbits( n):
 
    # take OR with odd
    # set bits number
    return n | getevenbits(n)
 
 
# Driver Program
n = 10
print(setalloddbits(n))
     
 
# This code is contributed
# by Gitanjali.

C#




// Efficient C# program to
// set all odd bits number
using System;
 
class GFG
{
     
    // return MSB set number
    static int getmsb(int n)
    {
        // set all bits
        // including MSB.
        n |= n >> 1;
        n |= n >> 2;
        n |= n >> 4;
        n |= n >> 8;
        n |= n >> 16;
 
        // return MSB
        return (n + 1) >> 1;
    }
     
    // Returns a number of same
    // size (MSB at same position)
    // as n and all odd bits set.
    static int getevenbits(int n)
    {
        n = getmsb(n);
 
        // generate odd bits
        // like 010101..
        n |= n >> 2;
        n |= n >> 4;
        n |= n >> 8;
        n |= n >> 16;
 
        // if bits is even
        // then shift by 1
        if ((n & 1) == 0)
            n = n >> 1;
 
        // return odd
        // set bits number
        return n;
    }
 
    // set all odd bits here
    static int setalloddbits(int n)
    {
        // take OR with odd
        // set bits number
        return n | getevenbits(n);
    }
 
    // Driver Code
    static public void Main ()
    {
        int n = 10;
        Console.WriteLine(setalloddbits(n));
    }
}
 
// This code is contributed ajit

PHP




<?php
// Efficient php program to
// set all  odd bits number
 
// return MSB set number
function getmsb($n)
{
     
    // set all bits
    // including MSB.
    $n |= $n >> 1;
    $n |= $n >> 2;
    $n |= $n >> 4;
    $n |= $n >> 8;
    $n |= $n >> 16;
 
    // return MSB
    return ($n + 1) >> 1;
}
 
// Returns a number of
// same size (MSB at
// same position) as n
// and all odd bits set
function getevenbits($n)
{
    $n = getmsb($n);
 
    // generate odd bits
    // like 010101..
    $n |= $n >> 2;
    $n |= $n >> 4;
    $n |= $n >> 8;
    $n |= $n >> 16;
 
    // if bits is even
    // then shift by 1
    if (($n&1) == 0)
        $n = $n >> 1;
     
    // return odd set
    // bits number
    return $n;
}
 
// set all odd bits here
function setalloddbits($n)
{
     
    // take OR with odd
    // set bits number
    return $n | getevenbits($n);
}
 
    // Driver code
    $n = 10;
    echo setalloddbits($n);
 
// This code is contributed by mits
?>

Javascript




<script>
 
// Efficient Javascript program to
// set all odd bits number
 
// Return MSB set number
function getmsb(n)
{
     
    // Set all bits
    // including MSB.
    n |= n >> 1;
    n |= n >> 2;
    n |= n >> 4;
    n |= n >> 8;
    n |= n >> 16;
 
    // Return MSB
    return (n + 1) >> 1;
}
  
// Returns a number of same
// size (MSB at same position)
// as n and all odd bits set.
function getevenbits(n)
{
    n = getmsb(n);
 
    // Generate odd bits
    // like 010101..
    n |= n >> 2;
    n |= n >> 4;
    n |= n >> 8;
    n |= n >> 16;
 
    // If bits is even
    // then shift by 1
    if ((n & 1) == 0)
        n = n >> 1;
 
    // Return odd
    // set bits number
    return n;
}
 
// Set all odd bits here
function setalloddbits(n)
{
     
    // Take OR with odd
    // set bits number
    return n | getevenbits(n);
}
 
// Driver Code
let n = 10;
document.write(setalloddbits(n));
 
// This code is contributed by decode2207 
 
</script>

Output: 

15

 

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.




My Personal Notes arrow_drop_up
Recommended Articles
Page :