【发布时间】:2013-05-25 11:46:33
【问题描述】:
我正在尝试查找数字的二进制基数,例如将数字四舍五入到它下面的最大整数的 floor 函数,我想将数字四舍五入到它下面的第一个二进制基数。
例如:
for 1000 it should be 512
for 10 it should be 8
for 208 it should be 128
这是我尝试过的。我觉得日志功能会消耗更多资源,那么有没有什么更快的方法?
#include<stdio.h>
int main() {
unsigned long long int num;
unsigned long long int mask;
scanf("%llu", &num);
mask = 0x80000000;
while(mask >>= 1) {
if (mask & num)
break;
}
printf("%llu\n", mask);
return 0;
}
谢谢:)
【问题讨论】:
-
关闭但不完全是 dup:stackoverflow.com/questions/671815/…
-
您可能想查看 Andrei Alexandrescu 的 Three Optimization Tips for C++,他在其中基本上使用了这个问题作为示例。幻灯片:24,视频:~30:00。
-
看看这个无分支代码以找到
ceil(log2(x)):stackoverflow.com/a/15327567/1553090——也许你可以适应它。 -
不完全是一个重复,尽管该解决方案效果很好。 @bugsbunny:如果您想要一种简单易懂的方法,您可以尝试“向上取整到 2 的下一个最高幂”算法 here 并右移 1 位
标签: c algorithm bit-manipulation