给定一个数字,任务是设置一个数字的所有奇数位。位的位置从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