给出一个二进制整数,如何在c / c ++中仅使用按位运算来反转(翻转)最后n位?
例如:
// flip last 2 bits
0110 -> 0101
0011 -> 0000
1000 -> 1011
答案 0 :(得分:5)
您可以使用翻转数字的最后n位
#define flipBits(n,b) ((n)^((1u<<(b))-1))
例如flipBits(0x32, 4)
将翻转最后4位,结果将是0x3d
之所以可行,是因为如果您认为异或的工作原理
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 ++