我需要一个C宏来得到比给定数大的二次幂的最小值。
例如,FIRSTFREEBIT(0x16)(binary1_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,
};

一个相似但略有不同的问题:
Algorithm for finding the smallest power of two that's greater or equal to a given value

最佳答案

这是我的代码,欢迎你发明更好的东西:

#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))))))

关于c - C宏获得大于给定数的2的最小幂,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23954650/

10-11 04:00