Set all even bits of a number
Last Updated :
21 Nov, 2022
Given a number, the task is to set all even bits of a number. Positions of bits are counted from LSB (least significant bit) to MSB (Most significant bit). The position of LSB is considered as 1.
Examples :
Input : 20
Output : 30
Binary representation of 20 is
10100. After setting
even bits, we get 11110
Input : 10
Output : 10
Method 1:
- First, generate a number that contains even position bits.
- Take OR with the original number. Note that 1 | 1 = 1 and 1 | 0 = 1.
Let’s understand this approach with the below code.
C++
#include <iostream>
using namespace std;
int evenbitsetnumber( int n)
{
int count = 0, res = 0;
for ( int temp = n; temp > 0; temp >>= 1) {
if (count % 2 == 1)
res |= (1 << count);
count++;
}
return (n | res);
}
int main()
{
int n = 10;
cout << evenbitsetnumber(n);
return 0;
}
|
Java
class GFG
{
static int evenbitsetnumber( int n)
{
int count = 0 , res = 0 ;
for ( int temp = n; temp > 0 ; temp >>= 1 ) {
if (count % 2 == 1 )
res |= ( 1 << count);
count++;
}
return (n | res);
}
public static void main(String[] args)
{
int n = 4 ;
System.out.println(evenbitsetnumber(n));
}
}
|
Python3
def evenbitsetnumber(n):
count = 0
res = 0
temp = n
while (temp > 0 ):
if (count % 2 = = 1 ):
res | = ( 1 << count)
count + = 1
temp >> = 1
return (n | res)
n = 10
print (evenbitsetnumber(n))
|
C#
using System;
class GFG
{
static int evenbitsetnumber( int n) {
int count = 0, res = 0;
for ( int temp = n; temp > 0; temp >>= 1) {
if (count % 2 == 1)
res |= (1 << count);
count++;
}
return (n | res);
}
public static void Main()
{
int n = 4;
Console.WriteLine(evenbitsetnumber(n));
}
}
|
PHP
<?php
function evenbitsetnumber( $n )
{
$count = 0;
$res = 0;
for ( $temp = $n ; $temp > 0; $temp >>= 1)
{
if ( $count % 2 == 1)
$res |= (1 << $count );
$count ++;
}
return ( $n | $res );
}
$n = 10;
echo evenbitsetnumber( $n );
?>
|
Javascript
<script>
function evenbitsetnumber(n)
{
let count = 0, res = 0;
for (let temp = n; temp > 0; temp >>= 1)
{
if (count % 2 == 1)
res |= (1 << count);
count++;
}
return (n | res);
}
let n = 10;
document.write(evenbitsetnumber(n));
</script>
|
Method 2 (A O(1) solution for 32 bit numbers)
C++
#include <iostream>
using namespace std;
int getmsb( int n)
{
n |= n >> 1;
n |= n >> 2;
n |= n >> 4;
n |= n >> 8;
n |= n >> 16;
return (n + 1) >> 1;
}
int getevenbits( int n)
{
n = getmsb(n);
n |= n >> 2;
n |= n >> 4;
n |= n >> 8;
n |= n >> 16;
if (n & 1)
n = n >> 1;
return n;
}
int setallevenbits( int n)
{
return n | getevenbits(n);
}
int main()
{
int n = 10;
cout << setallevenbits(n);
return 0;
}
|
Java
import java.io.*;
class GFG
{
static int getmsb( int n)
{
n |= n >> 1 ;
n |= n >> 2 ;
n |= n >> 4 ;
n |= n >> 8 ;
n |= n >> 16 ;
return (n + 1 ) >> 1 ;
}
static int getevenbits( int n)
{
n = getmsb(n);
n |= n >> 2 ;
n |= n >> 4 ;
n |= n >> 8 ;
n |= n >> 16 ;
if ((n & 1 ) == 1 )
n = n >> 1 ;
return n;
}
static int setallevenbits( int n)
{
return n | getevenbits(n);
}
public static void main (String[] args)
{
int n = 10 ;
System.out.println(setallevenbits(n));
}
}
|
Python3
def getmsb(n):
n | = n >> 1
n | = n >> 2
n | = n >> 4
n | = n >> 8
n | = n >> 16
return (n + 1 ) >> 1
def getevenbits(n):
n = getmsb(n)
n | = n >> 2
n | = n >> 4
n | = n >> 8
n | = n >> 16
if (n & 1 ):
n = n >> 1
return n
def setallevenbits(n):
return n | getevenbits(n)
n = 10
print (setallevenbits(n))
|
C#
using System;
class GFG
{
static int getmsb( int n)
{
n |= n >> 1;
n |= n >> 2;
n |= n >> 4;
n |= n >> 8;
n |= n >> 16;
return (n + 1) >> 1;
}
static int getevenbits( int n)
{
n = getmsb(n);
n |= n >> 2;
n |= n >> 4;
n |= n >> 8;
n |= n >> 16;
if ((n & 1) == 1)
n = n >> 1;
return n;
}
static int setallevenbits( int n)
{
return n | getevenbits(n);
}
public static void Main ()
{
int n = 10;
Console.WriteLine(setallevenbits(n));
}
}
|
PHP
<?php
function getmsb( $n )
{
$n |= $n >> 1;
$n |= $n >> 2;
$n |= $n >> 4;
$n |= $n >> 8;
$n |= $n >> 16;
return ( $n + 1) >> 1;
}
function getevenbits( $n )
{
$n = getmsb( $n );
$n |= $n >> 2;
$n |= $n >> 4;
$n |= $n >> 8;
$n |= $n >> 16;
if ( $n & 1)
$n = $n >> 1;
return $n ;
}
function setallevenbits( $n )
{
return $n | getevenbits( $n );
}
$n = 10;
echo setallevenbits( $n );
?>
|
Javascript
<script>
function getmsb(n)
{
n |= n >> 1;
n |= n >> 2;
n |= n >> 4;
n |= n >> 8;
n |= n >> 16;
return (n + 1) >> 1;
}
function getevenbits(n)
{
n = getmsb(n);
n |= n >> 2;
n |= n >> 4;
n |= n >> 8;
n |= n >> 16;
if ((n & 1) == 1)
n = n >> 1;
return n;
}
function setallevenbits(n)
{
return n | getevenbits(n);
}
let n = 10;
document.write(setallevenbits(n));
</script>
|
Method 3: Using bit mask
To set a bit, we can take OR of 1 and that bit (as 1 | 1 = 1, and 1 | 0 = 1). Therefore, to set all odd bits of an n-bit number, we need to use a bit mask which is an n-bit binary number with all odd bits set. This mask can be generated in 1 step using the formula of sum of a geometric progression, as an n bit number …1010 is equal to 21 + 23 + 25 + …. 2 (n – !(n % 1)) .
Approach:
- Calculate the number of bits using log2(number)
- Calculate the largest power m, of the GP series using the formula (numOfBits – !(numOfBits % 1)).
- Calculate the value of the mask using the formula: a × (r m + 1 – 1) / (r – 1).
- Perform the setting operation using number | mask.
C++
#include <bits/stdc++.h>
using namespace std;
long long int setEvenBits( long long int n) {
int numOfBits = 1 + ( int )log2(n);
if (numOfBits == 1)
return n;
int m = (numOfBits - !(numOfBits % 1)) / 2 ;
int mask = (2 * ((1 << (2 * m)) - 1)) / 3;
return mask | n;
}
int main()
{
int n = 102121;
cout << setEvenBits(n);
return 0;
}
|
Java
import java.util.*;
class GFG {
static int setEvenBits( int n)
{
int numOfBits
= 1 + ( int )(Math.log(n) / Math.log( 2 ));
if (numOfBits == 1 )
return n;
int m = (numOfBits - 1 ^ (numOfBits % 1 )) / 2 ;
int mask = ( 2 * (( 1 << ( 2 * m)) - 1 )) / 3 ;
return mask | n;
}
public static void main(String[] args)
{
int n = 102121 ;
System.out.println(setEvenBits(n));
}
}
|
Python3
from math import log
def setEvenBits(n):
numOfBits = 1 + int (log(n, 2 ))
if numOfBits = = 1 :
return n
m = int ((numOfBits - 1 ^ (numOfBits % 1 )) / 2 )
mask = int (( 2 * (( 1 << ( 2 * m)) - 1 )) / 3 )
return mask | n
n = 102121
print (setEvenBits(n))
|
C#
using System;
class GFG
{
static int setEvenBits( int n)
{
int numOfBits
= 1 + ( int )(Math.Log(n) / Math.Log(2));
if (numOfBits == 1)
return n;
int m = (numOfBits - 1 ^ (numOfBits % 1)) / 2;
int mask = (2 * ((1 << (2 * m)) - 1)) / 3;
return mask | n;
}
public static void Main( string [] args)
{
int n = 102121;
Console.WriteLine(setEvenBits(n));
}
}
|
Javascript
function setEvenBits(n) {
let numOfBits = 1 + Math.floor(Math.log2(n));
if (numOfBits == 1)
return n;
let m = Math.floor((numOfBits - !(numOfBits % 1)) / 2);
let mask = Math.floor((2 * ((1 << (2 * m)) - 1)) / 3);
return mask | n;
}
let n = 102121;
console.log(setEvenBits(n));
|
Time Complexity: O(1)
Auxiliary Space: O(1)
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...