代码之家  ›  专栏  ›  技术社区  ›  MuhsinFatih

倒转(翻转)只进行位运算的数字的最后n位

  •  2
  • MuhsinFatih  · 技术社区  · 6 年前

    给定一个二进制整数,我如何反转(翻转)最后N位仅使用C/C++中的按位运算?
    例如:

    // flip last 2 bits
    0110 -> 0101
    0011 -> 0000
    1000 -> 1011
    
    1 回复  |  直到 6 年前
        1
  •  5
  •   MuhsinFatih    6 年前

    您可以使用

    #define flipBits(n,b) ((n)^((1u<<(b))-1))
    

    例如 flipBits(0x32, 4) 将翻转最后4位,结果将为 0x3d


    这是因为如果你认为XOR是如何工作的

     0 ^ 0 => 0
     1 ^ 0 => 1
    

    不是 轻弹

    0 ^ 1 => 1
    1 ^ 1 => 0
    

    轻弹


     (1<<b)-1
    

    这部分给你最后的N位 例如,如果b是4,那么 1<<4 0b10000 如果我们取下1,我们得到我们的面具 0b1111 然后,我们可以使用这个来对我们的数字执行异或,以获得所需的输出。

    C和C++的工作