如何找到数字的两个幂

suh*_*hel -6 c

我有一个数字,功率为2,例如128 ==这是2次幂7.

如何找到这个数字的两个幂.

用最少的代码.

ran*_*ame 6

试试这个,

int a = 128, ret = 0;
while (a) { ret++; a >>= 1; }
Run Code Online (Sandbox Code Playgroud)

要么,

int a = 128, ret = 0;
#define check(i) if ((-1 << i) & a) { ret += i; a >>= i; }
check (16)
check (8)
check (4)
check (2)
check (1)
Run Code Online (Sandbox Code Playgroud)

这是因为-1 == 0xffffffffff...又名无穷无尽的1弦.所以我基本上执行二进制搜索来定位最高设置位的索引.