两个数字按位连接
Bitwise concatenation of two numbers
我打算写一个函数,它接受两个数字并将它们的二进制值连接起来,这样:
resultingNumber = (number1) |(科学)
这里我需要((number1) <<num_bits_in_2) |(科学)。即数字2应该占据最低位。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。
您可以使用_BitScanReverse内禀来快速查找number2
的位数。
long long func( long number1, long number2)
{
unsigned long numBits = 0;
if( _BitScanReverse(&numBits, (unsigned)number1))
{
return (long long)(number1<<numBits)|number2;
}
return (long long)number2;
}
请注意,结果数字的大小应该足够大,以容纳其他数字。
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 检查输入是否不是整数或数字
- 如何(从固定列表中)选择一个数字序列,该序列将与目标数字相加
- 如何用数字处理log(0)
- 当套接字连接断开时检测C/C++Unix
- 最高有效数字侧的第N位
- 如何获取一个数字的前3位
- 查找最接近的大于当前数字的数字的索引
- 找到两对数字,使它们的乘积的绝对差最小化
- 我想做一个彼此不同但重复出现的数字
- 将数字转换为字母(例如:123 转换为一二三)
- C++如何计算用户输入的数字中的偶数位数
- 将数字矩阵与 Rcpp 连接起来
- 在可变参数模板函数中连接字符串(和数字)
- 连接字符串和数字
- 连接两个十六进制数字
- 两个数字按位连接
- 连接字符串和数字
- 在一个向量中连接数字以形成一个数字