仅按位运算反转(翻转)数字的最后 n 位

Invert (flip) last n bits of a number with only bitwise operations

本文关键字:数字 最后 翻转 运算      更新时间:2023-10-16

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

// flip last 2 bits
0110 -> 0101
0011 -> 0000
1000 -> 1011
你可以翻

转你的数字的最后n位

#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的掩码,那么我们可以使用它与我们的数字进行 XOR 以获得所需的输出。

适用于 C 和C++