《C++中插入位的函数实现及示例说明》
这个函数 insertBits 的作用是将整数 M 插入到整数 N 的指定位置区间 [i, j] 中。具体来说,函数会先清除 N 中从第 i 位到第 j 位的所有位,然后将 M 左移 i 位后与清除后的 N 相加,从而将 M 插入到 N 的指定位置。
函数实现步骤解析:
清除 N 中从第 i 位到第 j 位的所有位:
for (int n = i; n <= j; ++n)
{
N &= ~(1 << n);
}
1 << n:生成一个只有第 n 位为 1 的二进制数。
~(1 << n):对上述结果取反,得到一个只有第 n 位为 0,其余位全为 1 的二进制数。
N &= ~(1 << n):将 N 与这个数进行按位与操作,从而将 N 的第 n 位清零。
循环从 i 到 j,确保将 N 的第 i 位到第 j 位全部清零。
将 M 左移 i 位后与清除后的 N 相加:
return N + (M << i);
M << i:将 M 左移 i 位,使其对齐到 N 中被清除的位置区间 [i, j]。
N + (M << i):将左移后的 M 与清除后的 N 相加,完成插入操作。
示例说明:
假设 N = 10000000000(二进制),M = 10011(二进制),i = 2,j = 6。
清除 N 的第 2 位到第 6 位:
清除后的 N 变为 10000000000(二进制),因为原 N 的第 2 到 6 位本来就是 0。
将 M 左移 2 位:
M << 2 得到 1001100(二进制)。
将左移后的 M 与清除后的 N 相加:
10000000000 + 1001100 = 10001001100(二进制),即十进制的 1100。
注意事项:
该函数假设 M 的位数不超过 j - i + 1,否则可能导致数据溢出。
使用加法 + 而非按位或 | 是安全的,因为清除操作确保了 N 的第 i 到 j 位全为 0,不会与 M << i 产生进位冲突。
函数用途:
这个函数常用于位操作中,例如在嵌入式系统中配置寄存器的特定位域,或在数据压缩、加密等场景中将小数据块插入到大数据结构的指定位置。



















