我想找到任何整数包含的2的幂。像12 = 2 * 2 * 3一样,答案应以2出现,28 = 2 * 2 * 7则答案应以2出现,依此类推。
int powerOf2InNumber = (int)Math.floor(Math.log(number) / Math.log(2));
我尝试了上面的代码,但在28、26、10等情况下,我得到了错误的答案。
有一个方便的内置函数,
int powersOf2 = Integer.numberOfTrailingZeros(number);
这应该可以解决问题:
int check = 28;
int count = 0;
while(check % 2 == 0) {
check /= 2;
count++;
}
检查最终成为另一个因素。即7 in 2 * 2 *7。计数是您的答案。
我想你要问的是:2乘以数字的次数?
int countPowerOfTwo(int number) {
int count = 0;
while (abs(number) > 0) {
if (number % 2 != 0) {
return count;
}
count++;
number = number / 2;
}
return count;
}
最佳方式imo已使用Integer.numberOfTrailingZeros
提供。它取材自Hacker's Delight,这是一本非常好的书,物有所值。另一种方法如下:
int b = 32*75;
int powerOf2 = BitSet.valueOf(new long[]{b}).nextSetBit(0);
System.out.println(powerOf2);
打印
5
注意:为了完整起见,您的尝试并不遥远,对数可以与一些基本的位操作一起使用。因此,您可以执行以下操作:
int number = 32*75;
int powerOf2 = (int)(Math.log(number & -number)/Math.log(2))