我有一个数字,功率为2,例如128 ==这是2次幂7。
如何找到数字的两个幂。
只需极少的代码。
答案 0 :(得分:6)
试试这个,
int a = 128, ret = 0;
while (a) { ret++; a >>= 1; }
或者,
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)
这是有效的,因为-1 == 0xffffffffff...
a.k.a.是一个无尽的1字符串。所以我基本上执行二进制搜索来找到最高设置位的索引。
答案 1 :(得分:0)
这应该这样做:
int num=64,pow=0;
while(num){++pow;num>>=1;}
它非常简单,因为它使用字节操作,所以它也很快
答案 2 :(得分:0)
关于其他答案,我认为在进入while循环之前,必须将数字递减以获得正确答案:
public static int getPowersOfTwo(int number) {
int powersOfTwo = 0;
number--; // has the effect of zeroing out the most significant non-zero bit
while (number > 0) {
powersOfTwo++;
number >>= 1;
}
return powersOfTwo;
}