📜  设置数字的所有奇数位

📅  最后修改于: 2021-04-28 17:52:01             🧑  作者: Mango

给定一个数字,任务是设置一个数字的所有奇数位。位的位置从LSB(最低有效位)到MSB(最高有效位)进行计数。 LSB的位置被认为是1。

例子 :

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

方法1(使用或)
1.首先生成一个包含奇数位的数字。
2.在原始号码上加上OR。注意1 | 1 = 1和1 | 0 = 1。

让我们用下面的代码了解这种方法。

C++
// CPP code Set all odd bits
// of a number
#include 
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
 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


C++
// Efficient CPP program to set all
// odd bits number
#include 
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
> 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
?>


输出:

15

方法2(32位数字的AO(1)解决方案)

C++

// Efficient CPP program to set all
// odd bits number
#include 
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

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

输出:

15