首页 > 代码库 > 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);
写程序使得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)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。