按位取反问题,首先想到的就是与1进行异或操作,因为0与1异或的结果是1,1与1异或的结果是0,其结果相当于取反。
需要四步
以M=2,N=4为例
1)将1左移N位(00000001=>000100000)
2)将步骤1)得到的数减1(00010000=>00001111)
3)将步骤2)得到的数左移M位(00001111=>00111100)
4)将步骤3)得到的数与原数字进行异或
int getNum(int i,int m,int n)
{
int a=1<<n;
a--;
a=a<<m;
return a^i;
}