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

按位取反问题,首先想到的就是与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;

}

猜你喜欢

转载自blog.csdn.net/Jeff_Winger/article/details/80784320