任何人都可以提出一种方法来检查数字是否为2的幂,仅使用<<运算符,就意味着没有+,-*,/循环。
一线之类的东西。
如果不能,您可以使用<<
答案 0 :(得分:2)
如果数字是2
的幂,则在二进制表示形式中只有一个1
位。
即10
,100
,100000
等。如果减去1,将得到整个1
。
例如10-1=1
,100-1=11
等。这就是为什么如果您进行x&(x-1)
会得到全零的原因。
因此,您可以使用下面的公式
x && (!(x&(x-1)))
下面的表达式中的第一个x用于x
为0
的情况。
答案 1 :(得分:0)
public class Solution{
public static void main(String[] args) {
System.out.println(isPowerOf2(1));
System.out.println(isPowerOf2(2));
System.out.println(isPowerOf2(4));
System.out.println(isPowerOf2(128));
System.out.println(isPowerOf2(62));
}
private static boolean isPowerOf2(int num){
int temp = 1;
while(temp < num){
temp <<= 1;
}
return temp == num;
}
}
输出:
true
true
true
true
false
答案 2 :(得分:0)
左移实际上是将数字乘以2,而右移是将数字除。
因此,如果您想检查数字num
是2的幂,则必须取temp=1
并执行temp>>1
直到temp<=num
如果temp==num
在此循环中,则{ {1}}是两个的幂,不是。