首页 > 其他 > 详细

021位操作1(keep it up)

时间:2014-09-10 01:38:39      阅读:298      评论:0      收藏:0      [点我收藏+]
给定两个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)

原文:http://blog.csdn.net/xiaoliangsky/article/details/39167167

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!