gar*_*ima 5 c bit-manipulation
给定一个整数,打印其二进制表示中具有相同1位数的下一个最小和下一个最大数字
在计算数字中的1的数量之后.如何确定下一个最小的数字?
对于下一个高,你可以使用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位的第一个数字是一个.
小智 7
对于较小的
int getNextSmaller(int num) {
return ~getNextLarger(~num);
}
Run Code Online (Sandbox Code Playgroud)
有时,事情就是那么简单.:)
http://www.sureinterview.com/shwqst/40004
| 归档时间: |
|
| 查看次数: |
6197 次 |
| 最近记录: |