使用左移检查一行中2的幂

时间:2018-10-24 08:57:29

标签: algorithm bit

任何人都可以提出一种方法来检查数字是否为2的幂,仅使用<<运算符,就意味着没有+,-*,/循环。 一线之类的东西。
如果不能,您可以使用<<

3 个答案:

答案 0 :(得分:2)

如果数字是2的幂,则在二进制表示形式中只有一个1位。 即10100100000等。如果减去1,将得到整个1。 例如10-1=1100-1=11等。这就是为什么如果您进行x&(x-1)会得到全零的原因。 因此,您可以使用下面的公式

x && (!(x&(x-1)))

下面的表达式中的第一个x用于x0的情况。

答案 1 :(得分:0)

public class Solution{
    public static void main(String[] args) {
        System.out.println(isPowerOf2(1));
        System.out.println(isPowerOf2(2));
        System.out.println(isPowerOf2(4));
        System.out.println(isPowerOf2(128));
        System.out.println(isPowerOf2(62));
    }

    private static boolean isPowerOf2(int num){
        int temp = 1;
        while(temp < num){
            temp <<= 1;
        }
        return temp == num;
    }
}

输出:

true
true
true
true
false

答案 2 :(得分:0)

左移实际上是将数字乘以2,而右移是将数字除。 因此,如果您想检查数字num是2的幂,则必须取temp=1并执行temp>>1直到temp<=num如果temp==num在此循环中,则{ {1}}是两个的幂,不是。