《C++中插入位的函数实现及示例说明》
《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
产生进位冲突。
函数用途:
这个函数常用于位操作中,例如在嵌入式系统中配置寄存器的特定位域,或在数据压缩、加密等场景中将小数据块插入到大数据结构的指定位置。