Set all odd bits of a number - GeeksforGeeks

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++
Java
Python3
C#
PHP
Javascript
// CPP code Set all odd bits// of a number#include <iostream>using namespace std; // set all odd bitint 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 codeint main(){    int n = 10;    cout << oddbitsetnumber(n);    return 0;}
// 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 code Set all odd bits   of a number'''    # set all odd bitdef 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 = 10print (oddbitsetnumber(n)) #This code is contributed by Shreyanshi Arun.
// C# code to Set all odd// bits of a numberusing 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 code Set all odd// bits  of a number // set all odd bitfunction 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?>
<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++
Java
Python3
C#
PHP
Javascript
// Efficient CPP program to set all// odd bits number#include <iostream>using namespace std; // return MSB set numberint 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 hereint setalloddbits(int n){       // take OR with odd set bits number    return n | getevenbits(n);   } // Driver codeint main(){    int n = 10;    cout << setalloddbits(n);    return 0;}
// Efficient Java program to set// all odd bits numberclass 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
# Efficient python3 program to # set all odd bits numberimport math # return MSB set numberdef 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 heredef setalloddbits( n):     # take OR with odd    # set bits number    return n | getevenbits(n)  # Driver Programn = 10print(setalloddbits(n))      # This code is contributed# by Gitanjali.
// Efficient C# program to// set all odd bits numberusing 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// Efficient php program to// set all  odd bits number // return MSB set numberfunction 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 setfunction 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 herefunction 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?>
<script> // Efficient Javascript program to// set all odd bits number // Return MSB set numberfunction 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 herefunction setalloddbits(n){         // Take OR with odd    // set bits number    return n | getevenbits(n);} // Driver Codelet n = 10;document.write(setalloddbits(n)); // This code is contributed by decode2207  </script>
Output: 
15
 
Mithun Kumar
jit_t
rdaniellivingston
chinmoy1997pal
decode2207
Bit Magic
Bit Magic
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Set, Clear and Toggle a given bit of a number in C
Write an Efficient Method to Check if a Number is Multiple of 3
Swap two nibbles in a byte
Highest power of 2 less than or equal to given number
Swap bits in a given number
Check for Integer Overflow
Reverse actual bits of the given number
Find one extra character in a string
Bit Tricks for Competitive Programming
Count total bits in a number