位运算
是不是2的整数次方
如果已经吃透了上一道题《二进制数中“1“比特的个数》,只要稍加思考,就会发现这道题与上一道的考点是一样的,都是判断"1"比特的个数。
题目:是不是2的整数次方
题目描述:用一条语句(注意:一条语句)判断一个整数是不是2的整数次方
结题思路:
1、若一个数为2的整数次方,则其二进制只有一个1比特,其余全为0
1.1、例如:2 --> 0000 0010, 16 --> 0001 0000
2、设整数为N,执行一次 (N-1) & N == 0 是否成立。即可判断
public class 是不是2的整数次方 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int N = scanner.nextInt();
System.out.println("十进制数:" + N);
System.out.println("二进制数:" + Integer.toString(N, 2));
/*
* 1的二进制:00000001
* 2的二进制:00000010
* 4的二进制:00000100
* 8的二进制:00001000
* 16的二进制:00010000
* 由上可得,2的整数次方,则只有一个1个1比特
* 因此,问题可转化为:二进制中1的个数是不是1个
* 因为题目要求一条语句
*/
System.out.println(((N - 1) & N) == 0);
}
}
调试结果:
如有错误,敬请指正!