I intend to write a function which accepts two numbers and concatenates their binary values such that:
resultingNumber=(number1)|(number2)
Here i need ((number1) << num_bits_in_2) |(number2). i.e. number2 should occupy the lowest bits. Number1 should occupy the higher bits and should not overlap with bits of maxnumber2
func(number1, number2, maxnumber1, maxnumber2)
{
long rem,i=1,binaryMaxNumber1=0,binaryMaxNumber2=0, lenNumber1=0, lenNumber2=0;
do
{
rem=maxNumber1%2;
binaryMaxNumber1=binaryMaxNumber1 + (i*rem);
lenNumber1++;
maxNumber1=maxNumber1/2;
i=i*10;
}while(maxNumber1>0);
i=1;
do
{
rem=maxNumber2%2;
binaryMaxNumber2=binaryMaxNumber2 + (i*rem);
lenNumber2++;
maxNumber2=maxNumber2/2;
i=i*10;
}while(maxNumber2>0);
unsigned resultingNumber=(number1<<lenNumber2)|(number2);
}
I wrote the above mentioned program in order to get the desired results. Is there any other way which is more efficient than this to achieve the same in C/c++. As I need to call this function again and again for very large numbers.
Assuming your codes is correct your function can be rewritten like this:
unsigned long func( unsigned long number1, unsigned long number2, unsigned long , unsigned long maxnumber2)
{
while( maxnumber2 ) {
maxnumber2 >>= 1;
number1 <<= 1;
}
return number1 | number2;
}
But if you use the same maxnumber2
it would be better to count number of bits to shift outside of the function and pass that instead of maxnumber.