Muh*_*tih 2 c c++ bitwise-operators
给定一个二进制整数,如何在c/c ++中仅使用按位运算来反转(翻转)最后n位?
例如:
// flip last 2 bits
0110 -> 0101
0011 -> 0000
1000 -> 1011
Run Code Online (Sandbox Code Playgroud)
小智 5
您可以翻转数字的最后n位
#define flipBits(n,b) ((n)^((1u<<(b))-1))
Run Code Online (Sandbox Code Playgroud)
例如,flipBits(0x32, 4)
将翻转最后4位,结果将是0x3d
这是有效的,因为如果您认为XOR如何工作
0 ^ 0 => 0
1 ^ 0 => 1
Run Code Online (Sandbox Code Playgroud)
位没有被翻转
0 ^ 1 => 1
1 ^ 1 => 0
Run Code Online (Sandbox Code Playgroud)
位被翻转
(1<<b)-1
Run Code Online (Sandbox Code Playgroud)
这部分可以让你的最后n位,例如,如果b为4,然后1<<4
就是0b10000
,如果我们去掉1,我们得到我们的面具被0b1111
那么我们就可以用这个与我们的数异或,以获得所需的输出.
适用于C和C++