如何在 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))
我想求任意整数所包含的 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))