思路:2的阶次方数二进制的形式首位都是1,比如8的二进制为1000,4的二进制为100,如果把这个数减去1,再与该数做与(&)运算,结果一定是全0.比如8-1=7 7的二进制为111, 8&7=0000 4-1=3,3的二进制为11,3&4=000
所以我们可以通过这种判断一个数是不是2的阶次方数
public class Demo {
//从键盘输入的类
private static String s = "";
public static void Input() {//从键盘输入一行字符保存在s中
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
try {
s = bf.readLine();
} catch (IOException e) {
e.printStackTrace();
}
}
public static int getInt() {//把字符串类型转化为整型
Input();
return Integer.parseInt(s);
}
static class Result {
public void print(int d) {
if (((d - 1) & (d)) == 0 && (d != 0)) {
System.out.println(d + "是2的阶级次方数");
}else {
System.out.println(d+ "不是2的阶次方数");
}
}
}
public static void main(String[] args) {
Result result=new Result();
System.out.println("请输入一个整数: ");
int a=Demo.getInt();
result.print(a);
}
}