c++ - 两个数字的按位连接

标签 c++ c radix

我打算编写一个函数,它接受两个数字并将它们的二进制值连接起来,这样:

resultingNumber=(number1)|(number2)

这里我需要 ((number1) << num_bits_in_2) |(number2)。即 number2 应该占据最低位。 Number1 应该占用较高的位,并且不应与 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);
}

为了得到想要的结果,我写了上面提到的程序。有没有比这更有效的其他方法来在 C/C++ 中实现相同的目的。因为我需要为非常大的数字一次又一次地调用此函数。

最佳答案

假设您的代码是正确的,您的函数可以这样重写:

unsigned long func( unsigned long number1, unsigned long number2, unsigned long , unsigned long maxnumber2)
{
    while( maxnumber2 ) {
        maxnumber2 >>= 1;
        number1 <<= 1;
    }
    return number1 | number2;
}

但如果您使用相同的 maxnumber2,最好计算要移出函数的位数并传递它而不是 maxnumber。

关于c++ - 两个数字的按位连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25062614/

相关文章:

c++ - 大整数的乘法(阶乘)

c++ - 使用函数指针时,&标记有什么作用

C 基本编程概念

c - snprintf : simple way to force . 作为基数?

c++ - 使用 boost multiprecision/mpfr float - string could not be interpreted as valid integer 错误

c++ - C++ Objective-C 中矩形函数的使用

c++ - 如何确定 exe 文件是 .Net exe 还是常规 exe?

C 无法将值分配给结构体字段

java - 从基数 9 更改为基数 10

c++ - 具有动态列数的 QML TableView