Set all odd bits of a number

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

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

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right



Output:

15

 

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

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right



Output:

15


My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.



Improved By : Mithun Kumar, jit_t



Article Tags :
Practice Tags :


Be the First to upvote.


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.