求解power of tow问题(判断一个数是否为2的幂次方数)

xiaoxiao2021-02-28  19

public class PowerOfTow { public static void main(String[] args) { System.out.println(isPowerOfTow(4)); System.out.println(isPowerOfTow1(4, 0)); System.out.println(isPowerOfTow2(3)); } /** * 解法一: * 2的幂次方数都有一个特点,就是只有高位为1,其它位都是0,所以值需要统计位当中出现了几个1即可 * 那这个怎么实现呢?那就是让这个数n不断的左移,然后与1相与,如果是2的幂次方, * 那么除了最高位移到了最右与1相与能得到1,其它的情况下都得到的是0, * 所以将这些相与的结果(把01)相加如果等于1那就说明是2的幂次方数 * @param n * @return */ private static boolean isPowerOfTow(int n) { int curr = 0; while (n > 0) { curr += n & 1; n = n >> 1; } return curr == 1; } /** * 这中解法就是解法一的思路,只不过是用递归代替了循环 * @param n * @param curr * @return */ private static boolean isPowerOfTow1(int n, int curr) { if (n <= 0) return curr == 1; return isPowerOfTow1(n >> 1, curr += n & 1); } /** * 解法二: * 这中解法也是根据2的幂次方数的二进制数特点来实现的, * 只要是2的幂次方数都是最高位是1,其它位是0 * 那么只要将一个最高为是0其它位是1的数和这个数相与就能得到0,这个数就是当前2的幂次方数减一即可 * * @param n * @return */ private static boolean isPowerOfTow2(int n) { return ((n & (n - 1)) == 0); } }
转载请注明原文地址: https://www.6miu.com/read-2624832.html

最新回复(0)