我需要一个C宏来获得大于给定数字的2次幂的最小值。
例如,FIRSTFREEBIT(0x16)
(二进制1_0110
)必须等于0x20
。
我将使用它作为:
#include <someheader.h> // defines SOME_X and SOME_Y
enum {
x = SOME_X,
y = SOME_Y,
z = FIRSTFREEBIT(x|y),
t = z << 1,
};
字符串
类似但略有不同的SO问题:Algorithm for finding the smallest power of two that's greater or equal to a given value
3条答案
按热度按时间js5cn81o1#
这是我的代码,欢迎你发明更好的东西:
字符串
jdg4fx2g2#
看看
__builtin_clz
GCC内部代码。它会给你给予前导零的位数,这可以用来确定第一个位集的位置。然后做一个1
的左移位,乘以位置。deikduxw3#
下面是一个利用GCC _builtin_clz函数的编译时解决方案:
字符串