Alternate bits of two numbers to create a new number
Given two numbers, the task is to use alternative bits within two numbers to create result. We take first bits of second number, then second bit of the first number, third bit of second number and take the fourth bit of a first number and so on and generate a number with it.
Examples :
Input : n = 10, m = 11
Output : 11
Start from right of second number
Binary representation of n = 1 0 1 0
^ ^
Binary representation of m = 1 0 1 1
^ ^
Output is = 1 0 1 1
Input : n = 20, m = 7
Output : 5
Start from right of second number
binary representation of n = 1 0 1 0 0
^ ^
binary representation of m = 0 0 1 1 1
^ ^ ^
Output is = 0 0 1 0 1
Approach :-
1. Get the set even bits number of n.
2. Get the set odd bits number of m.
3. return OR of these number.
C++
#include <iostream>
using namespace std;
int setevenbits( int n)
{
int temp = n;
int count = 0;
int res = 0;
for (temp = n; temp > 0; temp >>= 1) {
if (count % 2 == 1)
res |= (1 << count);
count++;
}
return (n & res);
}
int setoddbits( int m)
{
int count = 0;
int res = 0;
for ( int temp = m; temp > 0; temp >>= 1) {
if (count % 2 == 0)
res |= (1 << count);
count++;
}
return (m & res);
}
int getAlternateBits( int n, int m)
{
int tempn = setevenbits(n);
int tempm = setoddbits(m);
return (tempn | tempm);
}
int main()
{
int n = 10;
int m = 11;
cout << getAlternateBits(n, m);
return 0;
}
|
C
#include <stdio.h>
int setevenbits( int n)
{
int temp = n;
int count = 0;
int res = 0;
for (temp = n; temp > 0; temp >>= 1) {
if (count % 2 == 1)
res |= (1 << count);
count++;
}
return (n & res);
}
int setoddbits( int m)
{
int count = 0;
int res = 0;
for ( int temp = m; temp > 0; temp >>= 1) {
if (count % 2 == 0)
res |= (1 << count);
count++;
}
return (m & res);
}
int getAlternateBits( int n, int m)
{
int tempn = setevenbits(n);
int tempm = setoddbits(m);
return (tempn | tempm);
}
int main()
{
int n = 10;
int m = 11;
printf ( "%d" , getAlternateBits(n, m));
return 0;
}
|
Java
import java.io.*;
class GFG {
static int setevenbits( int n)
{
int temp = n;
int count = 0 ;
int res = 0 ;
for (temp = n; temp > 0 ; temp >>= 1 ) {
if (count % 2 == 1 )
res |= ( 1 << count);
count++;
}
return (n & res);
}
static int setoddbits( int m)
{
int count = 0 ;
int res = 0 ;
for ( int temp = m; temp > 0 ; temp >>= 1 ) {
if (count % 2 == 0 )
res |= ( 1 << count);
count++;
}
return (m & res);
}
static int getAlternateBits( int n, int m)
{
int tempn = setevenbits(n);
int tempm = setoddbits(m);
return (tempn | tempm);
}
public static void main(String[] args)
{
int n = 10 ;
int m = 11 ;
System.out.println(getAlternateBits(n, m));
}
}
|
Python3
def setevenbits(n):
temp = n
count = 0
res = 0
while temp > 0 :
if count % 2 :
res | = ( 1 << count)
count + = 1
temp >> = 1
return (n & res)
def setoddbits(m):
temp = m
count = 0
res = 0
while temp > 0 :
if not count % 2 :
res | = ( 1 << count)
count + = 1
temp >> = 1
return (m & res)
def getAlternateBits(n, m):
tempn = setevenbits(n)
tempm = setoddbits(m)
return (tempn | tempm)
n = 10
m = 11
print (getAlternateBits(n, m))
|
C#
using System;
class GFG {
static int setevenbits( int n)
{
int temp = n;
int count = 0;
int res = 0;
for (temp = n; temp > 0; temp >>= 1) {
if (count % 2 == 1)
res |= (1 << count);
count++;
}
return (n & res);
}
static int setoddbits( int m)
{
int count = 0;
int res = 0;
for ( int temp = m; temp > 0; temp >>= 1)
{
if (count % 2 == 0)
res |= (1 << count);
count++;
}
return (m & res);
}
static int getAlternateBits( int n, int m)
{
int tempn = setevenbits(n);
int tempm = setoddbits(m);
return (tempn | tempm);
}
public static void Main ()
{
int n = 10;
int m = 11;
Console.WriteLine(getAlternateBits(n, m));
}
}
|
PHP
<?php
function setevenbits( $n )
{
$temp = $n ;
$count = 0;
$res = 0;
for ( $temp = $n ; $temp > 0; $temp >>= 1)
{
if ( $count % 2 == 1)
$res |= (1 << $count );
$count ++;
}
return ( $n & $res );
}
function setoddbits( $m )
{
$count = 0;
$res = 0;
for ( $temp = $m ; $temp > 0; $temp >>= 1)
{
if ( $count % 2 == 0)
$res |= (1 << $count );
$count ++;
}
return ( $m & $res );
}
function getAlternateBits( $n , $m )
{
$tempn = setevenbits( $n );
$tempm = setoddbits( $m );
return ( $tempn | $tempm );
}
$n = 10;
$m = 11;
echo getAlternateBits( $n , $m );
?>
|
Javascript
<script>
function setevenbits(n)
{
var temp = n;
var count = 0;
var res = 0;
for (temp = n; temp > 0; temp >>= 1) {
if (count % 2 == 1)
res |= (1 << count);
count++;
}
return (n & res);
}
function setoddbits(m)
{
var count = 0;
var res = 0;
for (temp = m; temp > 0; temp >>= 1)
{
if (count % 2 == 0)
res |= (1 << count);
count++;
}
return (m & res);
}
function getAlternateBits(n , m)
{
var tempn = setevenbits(n);
var tempm = setoddbits(m);
return (tempn | tempm);
}
var n = 10;
var m = 11;
document.write(getAlternateBits(n, m));
</script>
|
Output :
11
Time complexity: O(logn + logm)
Auxiliary Space: O(1)
Last Updated :
14 Jun, 2022
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...