我需要找到两个大于或等于给定值的最小幂。到目前为止,我有这个:
int value = 3221; // 3221 is just an example, could be any number int result = 1; while (result < value) result <<= 1;
它工作正常,但有点天真。有没有针对该问题的更好算法?
编辑。有一些不错的汇编程序建议,因此我将这些标记添加到问题中。
这是我的最爱。除了最初检查它是否无效(<0,如果知道只传递> = 0的数字可以跳过)之外,它没有循环或条件,因此它将胜过大多数其他方法。这类似于埃里克森的答案,但我认为我在开头减x并在结尾加1的方式比他的答案稍显尴尬(并且避免在结尾使用条件式)。
/// Round up to next higher power of 2 (return x if it's already a power /// of 2). inline int pow2roundup (int x) { if (x < 0) return 0; --x; x |= x >> 1; x |= x >> 2; x |= x >> 4; x |= x >> 8; x |= x >> 16; return x+1; }