位操作:使用相同的1位打印下一个最小和最大的数字

gar*_*ima 5 c bit-manipulation

给定一个整数,打印其二进制表示中具有相同1位数的下一个最小和下一个最大数字

在计算数字中的1的数量之后.如何确定下一个最小的数字?

Dum*_*dan 7

对于下一个高,你可以使用Hakmem 175:

第175项(Gosper):

要使用相同数量的1位获得下一个更高的数字:

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)

对于下一个更低的我不知道快速算法所以我会使用经典方法,如果数字>然后2 ^ 0 + 2 ^ 1 + ... 2 ^ n然后从您的数字中扣除一个并计算位数.具有n位的第一个数字是一个.

  • oops ...`nexthi_same_count_ones(0)` (3认同)
  • 你能解释一下这个算法吗?例如,每个计算意味着什么 (2认同)
  • 错误的变量命名,没有解释.你已经很难理解这里发生了什么. (2认同)

小智 7

对于较小的

int getNextSmaller(int num) {
    return ~getNextLarger(~num);
}
Run Code Online (Sandbox Code Playgroud)

有时,事情就是那么简单.:)

http://www.sureinterview.com/shwqst/40004

  • 链接坏了.你是怎么到达这个的?请添加一个例子 (2认同)

Ari*_*ata 7

这是一个非常好的解释.:)