[英]C function that returns index of smallest number greater than a given number from an array sorted in increased order
[英]C macro to get the smallest power of two greater than a given number
我需要一個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問題: 用於查找兩個大於或等於給定值的最小冪的算法
這是我的代碼,歡迎您發明更好的東西:
#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))))))
查看__builtin_clz
GCC內部函數。 它將為您提供前導零位的數量,可用於確定第一個位集的位置。 然后將位置左移1
倍。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.