簡體   English   中英

C宏獲得大於給定數的2的最小冪

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM