dar*_*dow 5 c algorithm bit-manipulation
我正在解决一个问题,给定一个数字 n,我必须找到下一个具有相同数量的设置位的较大元素。在互联网上搜索时,我发现了一段有趣的代码,它只需几行代码(BIT MAGIC)即可完成此操作:
unsigned nexthi_same_count_ones(unsigned a) {
/* works for any word length */
unsigned c = (a & -a);
unsigned r = a+c;
return (((r ^ a) >> 2) / c) | r);
}
Run Code Online (Sandbox Code Playgroud)
但我想了解该算法始终有效的基本逻辑。所有边界情况都将得到妥善处理。
有人可以用简单的步骤解释一下逻辑吗?
谢谢
在下一个更高的数字中,最右边1的 s 串中最左边的s 与其左边的1交换位置,而其余的s 移动到最右边。 01
1,a(使进位波动到下一个更高的位0,反转所有这些位)0从高位留出位置), 1可以容纳0与 右端一样多的 - 位a。| 归档时间: |
|
| 查看次数: |
3262 次 |
| 最近记录: |