C语言中如何将两个8位整数拼接合并为一个16位整数
C语言两个整数二进制拼接实现方案
实现逻辑
你需要的是将b的二进制序列作为高位、a的二进制序列作为低位拼接,核心步骤如下:
- 计算低位整数(示例中为
a)的二进制有效位数 - 将高位整数(示例中为
b)左移上述计算得到的位数,空出低位的存储空间 - 将左移后的
b与a做按位或运算(也可直接相加,左移后低位全为0,无进位冲突),得到最终拼接结果
完整代码示例
#include <stdio.h> // 计算整数二进制有效位数的工具函数 int get_bit_length(int num) { if (num == 0) { return 1; // 0的二进制默认占1位 } int len = 0; while (num > 0) { len++; num >>= 1; } return len; } int main() { int a = 8; // 二进制为1000,有效位4位 int b = 6; // 二进制为0110,有效位4位 int a_bit_len = get_bit_length(a); int merged = (b << a_bit_len) | a; printf("拼接后十进制结果:%d\n", merged); printf("拼接后十六进制结果:%#x\n", merged); return 0; }
运行结果说明
上述代码运行后输出的结果为104,对应二进制01101000,完全符合你的需求。
注意事项
- 若要调整拼接顺序,例如将
a放在高位、b放在低位,只需计算b的二进制位数,将a左移对应位数后再和b做按位或即可 - 需注意溢出风险:拼接后的结果不能超过所用整型的取值上限,32位
int的最大值为2^31-1,如果拼接后总位数超过31位,建议改用long long类型存储结果 - 如果有固定位数补前导零的需求,例如要求
b不管数值大小都固定占4位,无需动态计算位数,直接左移固定位数即可,比如示例需求可直接写merged = b << 4 | a,逻辑更简单
内容的提问来源于stack exchange,提问作者user17027168
相关产品推荐
相关产品推荐

