仅按位运算反转(翻转)数字的最后 n 位
Invert (flip) last n bits of a number with only bitwise operations
给定一个二进制整数,如何在 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++
相关文章:
- 斐波那契数列部分和的最后一位数字
- 修改的选择排序,选择最大的数字,然后交换到最后
- 我必须更改我的数字最后一个数字和第一个数字,但不要使用仅带有整数或循环的函数.例如从 12345 到 52341
- 查找数组最后 3 个数字的平均值
- 如何找到由公式计算的非常大的数字的最后一位数字?
- 带有文件结束函数的 while 循环重复输出文件中的最后一个数字两次
- 递归推动POP POSTFIX计算器无法正确执行操作,只需将最后一个数字作为结果
- 代码问题.使用矢量删除相同的数字,除了它的最后一个入口
- 为什么我的代码不给最后两个数字
- C++:对数组进行排序,最后一个数字重复两次
- C++ - 查找数组中第一个和最后一个负数之间的数字
- 我不想要最后一个数字/值后面的逗号,如何删除它(c ++,循环)
- C++ - 将数字表从文件读取到 2D 数组中(仅存储最后一行)
- 仅按位运算反转(翻转)数字的最后 n 位
- 我在spoj-lastdig2中使用我的代码 - 重新访问的最后一位数字
- C++检查从文件中读取的最后内容是否是数字
- 如何获取十六进制数的最后 n 位数字
- 查找非常大的 2^n 数字的最后一位数字
- 如何删除C++中浮点数的最后一个有效数字/尾数位
- 逐行计算文件:EOF 重复最后一个数字(不能使用中断)