如何用Java查找整数中2的指数?

问题描述 投票:2回答:4

我想找到任何整数包含的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等情况下,我得到了错误的答案。

java math exponential
4个回答
10
投票

有一个方便的内置函数,

int powersOf2 = Integer.numberOfTrailingZeros(number);

0
投票

这应该可以解决问题:

int check = 28;
int count = 0;
while(check % 2 == 0) {
    check /= 2;
    count++;
}

检查最终成为另一个因素。即7 in 2 * 2 *7。计数是您的答案。


0
投票

我想你要问的是:2乘以数字的次数?

int countPowerOfTwo(int number) {
  int count = 0;
  while (abs(number) > 0) {
    if (number % 2 != 0) {
      return count;
    }
    count++;
    number = number / 2;
  }
  return count;
} 

0
投票

最佳方式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))

© www.soinside.com 2019 - 2024. All rights reserved.