将一个数的二进制数倒数第M位的前N位取反

 

题目:将一个二进制数倒数第M位的前N位取反

分析:假设二进制位共有8位,M=2,N=4,将倒数第M位的前N为取反,即从倒数第3位开始至倒数第6位取反通过“亦或1处理”,因为将一个比特位亦或1,会将这个比特位取反。(即不包括倒数第M位,从它的下一位开始的连续N为)

总体思想是:产生N个1,并且将这N个1放到从倒数第M+1置倒数M+N位置,再与原数据进行亦或。步骤如下:
第一步:将1左移N位,移动后的结果减1,得到从最后一位开始连续的N个1
第二步:将第一步处理后的数据左移M位,即最后一个1来到倒数第M位的前一位
第三步:将第二步处理后的数据与原数据亦或即可。

int get_num(int x, int M, int N)
{
	int a = 1 << N;
	a -= 1;
	a = a << M;
	return a ^ x;
}
 
 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值