如何在 Java 中的整数中找到 2 的指数?

How to find the exponent of 2 in an integer in Java?

我想求任意整数所包含的 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 check = 28;
int count = 0;
while(check % 2 == 0) {
    check /= 2;
    count++;
}

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

有一个方便的内置函数,

int powersOf2 = Integer.numberOfTrailingZeros(number);

我想你问的是: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))