首页 > 代码库 > 021位操作1(keep it up)

021位操作1(keep it up)

给定两个32位的数,N和M,还有两个指示位的数,i和j。
写程序使得N中第i位到第j位的值与M中的相同(即:M变成N的子串且位于N的第i位和第j位之间)
例子:
输入: N = 10000000000, M = 10101, i = 2, j = 6
输出: N = 10001010100
解法:
首先我们把M左移vI位得到Mv;
然后我们保留N的0到I位:Si=N & ((1<<I)-1)
然后我们把N的0-J位全部置为0:N = (N>>(J+1))<<(J+1);

最后我们把以上得到的数加起来。

int changeBit(int vN, int vM, int vI, int vJ)
{
	if (vI > vJ || vI > 31 || vJ > 31) return 0;
	int Move_M_I = vM<<vI;
	int Last_N_I = vN & ((1<<vI)-1);
	vN = (vN>>(vJ+1))<<(vJ+1);
	int Result = vN | Move_M_I | Last_N_I;
}


021位操作1(keep it up)