【发布时间】:2014-10-27 19:04:43
【问题描述】:
我正在解决一个给定数字 n 的问题,我必须找到具有相同数量设置位的下一个更大的元素。在网上搜索时,我发现了一段有趣的代码,只需几行代码(BIT MAGIC)here:
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);
}
但我想了解该算法的基本逻辑,即它将始终有效。所有边界情况都会得到妥善处理。
谁能用简单的步骤解释一下逻辑。
谢谢
【问题讨论】:
-
@RPGillespie,这是
unsigned算术与signed关系不大。 -
"所有边界情况都会得到妥善处理。"嗯。如果
a == 0,代码会除以0。
标签: c algorithm bit-manipulation