我有三个整数,一个整数包含7位数据,另一个整数包含4位数据,第三个整数包含5位数据。
我希望将所有三个整数并排连接成一个16位整数,而不更改每个整数的值。
示例:
int a = 1; //7 bit data (uint8)
int b = 2; //4 bit data (uint8)
int c = 3; //5bit data (uint8)
其中, 0< a< 100,0< b< 13,0< c< 32 结果应如下:
result = 123;
示例2:
int a = 99; //7 bit data (uint8)
int b = 12; //4 bit data (uint8)
int c = 31; //5bit data (uint8)
result = 991231; //expected
如何使用位智能运算符实现这一目标?
答案 0 :(得分:1)
如下所示?您可以将其修改为适用于三个整数和所需大小。
unsigned concatenate(unsigned x, unsigned y) {
unsigned pow = 10;
while(y >= pow)
pow *= 10;
return x * pow + y;
}
int main(){
int a=1,b=2,c=3;
printf("%d\n", concatenate(concatenate(a,b),c));
}
信用到:How to concatenate two integers in C
如果你觉得自己很勇敢并且使用c++
,你可以扩展它以便使用可变数量的参数。
template <typename T>
inline T concatenate(T N){
return N;
}
template <typename T,typename...NS>
T concatenate(const T N, NS&&... ns){
const T rest = concatenate(std::forward<NS>(ns)...);
unsigned pow = 10;
while(rest >= pow)
pow *= 10;
return N * pow + rest;
}
int main()
{
int a=1,b=2,c=3;
printf("%d\n", concatenate(a,b,c,987,a));
}