2. 怎么最快判断一个数是不是2的幂
简单的分析一下吧:
从二进制的角度来看,凡是是2的幂的数,它的最高位一定是1,其余位都为0
即:0000001000000……00000
,如果我们用这个数减一的话,它的二进制为0000000111111……11111
,所以快速的判端一个数是不是2的幂可以用简单的位运算 n&(n-1)
代码如下:
import java.util.Scanner;
/**
* Class day02 ...
*
* @author LiJun
* Created on 2018/12/17
*/
// 怎么最快判断一个数是不是2的幂
public class day02 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n;
while(true){
n = scanner.nextInt();
if( (n&(n-1)) == 0){
System.out.println(n + "是2的幂");
}else{
System.out.println(n + "不是2的幂");
}
}
}
}
拓展,如何判断一个数是不是4的幂
分析:
在上述条件下,我们需要满足,这个 1 在偶数位上,
分为两步:
-
第一步:判断是不是2的幂
-
第二步,判断是不是4的幂
这一步的话,我们可以简单的用这个数与0x55555555,这个数就是偶数位全为0,奇数位全为1
代码如下:
public static void test() {
Scanner scanner = new Scanner(System.in);
int n;
while (true) {
n = scanner.nextInt();
if (((n & (n - 1)) == 0) && ((n & 0x55555555) == n)) {
System.out.println(n + " yes");
} else {
System.out.println(n + " no");
}
}
}