使用Java语言编写程序来判断一个整数是不是2的阶次方数,要求使用尽量快速简便的方法。
答:如果一个数是2的阶次方数,那么它的二进制数的首位一般是1,后面接若干位0。比如8就是1000,64是1000000。如果将这个数减1再与该数做&运算,则应该全部位都是0。所以如果一个数d,满足d&(d-1)==0,则这个数必定是可以被2的幂整除的数。
答:如果一个数是2的阶次方数,那么它的二进制数的首位一般是1,后面接若干位0。比如8就是1000,64是1000000。如果将这个数减1再与该数做&运算,则应该全部位都是0。所以如果一个数d,满足d&(d-1)==0,则这个数必定是可以被2的幂整除的数。
import java.util.Scanner;
public class Valid {
public static boolean doValid(int Number){
if((((Number-1)&Number)==0)&&Number!=0){
return true;
}
return false;
}
public static void main(String[] args){
Scanner s = new Scanner(System.in);
System.out.print("Input a number : ");
boolean result = Valid.doValid(s.nextInt());
if(result){
System.out.println("可以被2的幂整除!");
}else{
System.out.println("不可以被2的幂整除!");
}
}
}