位运算(5)——用一条语句判断一个整数是不是2的整数次方

本文介绍了一种简洁的算法,用于判断一个整数是否可以表示为2的整数次幂。通过分析整数的二进制表示,利用位运算特性,实现了高效的判断逻辑。文章还对比了逻辑与(&&)和按位与(&)的区别。
题目

  用一条语句判断一个整数是不是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,右面的表达式会直接被短路掉,不会再进行运算。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值