c宏之前获得的2的最小功率大于给定数目大(C macro to get the smallest p

2019-10-20 04:53发布

我需要一个C宏来得到最小的电二期大于给定数量大。

例如, 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问题: 算法寻找两个最小功率这是大于或等于给定值

Answer 1:

这里是我的代码,欢迎您来创造更好的东西:

#define __OR_RSHIFT__(n,x) ((x)|(x)>>n)
#define FIRST_UNUSED_BIT(x) (1+__OR_RSHIFT__(16,__OR_RSHIFT__(8,__OR_RSHIFT__(4,__OR_RSHIFT__(2,__OR_RSHIFT__(1,x))))))


Answer 2:

看看__builtin_clz GCC内在。 它会给你前导零位,可以用来确定第一个设置位的位置的数量。 然后做的左位移位1 ,次位置。



文章来源: C macro to get the smallest power of two greater than a given number