题目
用一条语句判断一个整数是不是2的整数次方。
分析
如果一个整数是2的整数次方,那它的二进制表示中有且只有一个1,其余为0。例如 8 —— 1000,16 —— 10000等等。反之如果不是2的整数次方,它的二进制表示中可有多个1,例如 9 —— 1001。
若将该整数减去1再与自己进行与运算,如 0111 ^ 1000 = 0,仅有的1也变为了0。根据这个规律,我们可以解答该题。
代码实现
import java.util.Scanner;
public class _04是不是2的整数次方 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
System.out.println(Integer.toString(N,2));
if ((N>0) && ((N - 1) & N) == 0) {
System.out.println("true");
} else {
System.out.println("false");
}
}
}
运行结果

力扣代码
class Solution {
public boolean isPowerOfTwo(int n) {
return n > 0 && (n & (n - 1)) == 0;
}
}
力扣运行结果

补充 && 和 & 区别
&& 被称为 短路运算,若 && 左面的表达式的值是 false,右面的表达式会直接被短路掉,不会再进行运算。
本文介绍了一种简洁的算法,用于判断一个整数是否可以表示为2的整数次幂。通过分析整数的二进制表示,利用位运算特性,实现了高效的判断逻辑。文章还对比了逻辑与(&&)和按位与(&)的区别。
——用一条语句判断一个整数是不是2的整数次方&spm=1001.2101.3001.5002&articleId=107979424&d=1&t=3&u=93c3479c7e6b4b10b9df276de1b4f820)
158

被折叠的 条评论
为什么被折叠?



