【发布时间】:2010-09-26 18:30:31
【问题描述】:
我需要找到大于或等于给定值的 2 的最小幂。到目前为止,我有这个:
int value = 3221; // 3221 is just an example, could be any number
int result = 1;
while (result < value) result <<= 1;
它工作正常,但感觉有点幼稚。有没有更好的算法来解决这个问题?
编辑。有一些很好的汇编程序建议,所以我将这些标签添加到问题中。
【问题讨论】:
-
应用程序是 C++,但我也可以使用一些 C# 或 Java,所以请随意使用您喜欢的。
-
更新了 Sparr 回答中提到的查找表解决方案的链接:graphics.stanford.edu/~seander/bithacks.html#IntegerLogLookup 这给出了 r = 0 到 31 的值,然后执行
1 << r以获得 2 的幂。 -
回答
python:stackoverflow.com/a/19164783/1959808 -
这不是重复的,现在可以在标准 c++20 中使用
bit标头完成。 c问题不能给出相同的答案。