1. 一直除 2,看最后是否等于1.
public class method01 {
public static void main(String[] args){
int i = 16; // 待判断的数
int count = 1; // 待判断的数是 2 的 count 次方
while (i>0){
if (2 == i){
System.out.println("i 是 2 的 "+count+" 次方!");
break;
}
if ( 0 == i%2){
i /= 2;
count++;
}else {
System.out.println("i 不是 2 的次方!");
break;
}
}
}
}
2.转换成 2 进制,只有一个1.
public class method02 {
public static void main(String[] args){
int i = 128; // 待判断的数
int count = 0; // 2 进制数中 1 的个数
while (i > 0) {
count += i & 0x01;
/**
* i 与 00000001 进行“与”操作
* 右移位的过程中,把最后一位直接丢弃
*/
i >>= 1;
}
if (count < 2){
// count = 0 || count = 1
System.out.println("i 是 2 的次方!");
}else {
System.out.println("i 不是 2 的次方!");
}
}
}
3. 如果 m&(m-1) == 0,则 m 是 2 的 n 次方
4&3 ---> 0100 & 0011 = 0
8&7 ---> 1000 & 0111 = 0
public class method03 {
public static void main(String[] args){
int i = 256;
if (fun(i)){
System.out.println("i 是 2 的次方!");
}else {
System.out.println("i 不是 2 的次方!");
}
}
public static boolean fun(int i){
return (i> 0 )&&(i & (i - 1))==0;
}
}