判断一个数是否是2的幂

给定一个数字判断是否是2的幂


int is2pow( int number)

{

       return number > 0 ? ((number & (~number + 1)) == number ? 1 : 0) : 0;

}

/*返回值为1是,0不是*/
在 Java 中,判断输入的值是否为 2有多种实现方法: #### 方法一:位右移操作统计 1 的个 通过位右移操作统计字二进制中 1 的总个,若只有一个 1,则该字是 2。 ```java class Solution { public boolean isPowerOfTwo(int n) { if (n <= 0) { return false; } int count = 0; while (n != 0) { if ((n & 1) == 1) { count++; } if (count > 1) { return false; } n = n >> 1; } return true; } } ``` #### 方法二:不断除以 2 不断将字除以 2,直到它变为 1(表示它是 2 的整)或者变成奇(表示它不是 2 的整)。 ```java public class IsPowerOfTwo { public static boolean isPowerOfTwo(int n) { if (n <= 0) { return false; } while (n % 2 == 0) { n /= 2; } return n == 1; } public static void main(String[] args) { int number = 16; System.out.println(number + " is a power of two? " + isPowerOfTwo(number)); } } ``` #### 方法三:递归右移 通过递归每次右移一位,判断字是否为 2。 ```java class Solution { public boolean isPowerOfTwo(int n) { return getResult(n); } private boolean getResult(int n) { if (n == 1) { return true; } if (n % 2 == 1) { return false; } if (n <= 0) { return false; } return getResult(n >> 1); } } ``` #### 方法四:位运算 `n & (n - 1)` 若 `n & (n - 1)` 结果为 0 且 `n` 不为 0,则 `n` 是 2。 ```java package com.thealgorithms.maths; public class PowerOfTwoOrNot { public static boolean checkIfPowerOfTwoOrNot(int number) { return number != 0 && ((number & (number - 1)) == 0); } public static void main(String[] args) { assert !checkIfPowerOfTwoOrNot(0); assert checkIfPowerOfTwoOrNot(1); assert checkIfPowerOfTwoOrNot(8); assert checkIfPowerOfTwoOrNot(16); assert checkIfPowerOfTwoOrNot(1024); } } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值