Проверьте степень 2 в одной строке, используя левую клавишу - PullRequest
0 голосов
/ 24 октября 2018

Может кто-нибудь предложить способ проверить, является ли число степенью 2, просто используя оператор <<, я имею в виду отсутствие циклов +, - *, /,.Нечто однострочное. <br>Если нет, вы можете дать мне наименьший алгоритм, используя <<, что приходит вам в голову </p>

Ответы [ 3 ]

0 голосов
/ 24 октября 2018
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
0 голосов
/ 24 октября 2018

Сдвиг влево фактически умножает число на два, а сдвиг вправо делит его.Поэтому, если вы хотите проверить, что число num является степенью двойки, вы должны взять temp=1 и сделать temp>>1 до temp<=num. Если temp==num в этом цикле, то num - это степень двух, иначе это не так..

0 голосов
/ 24 октября 2018

Если число является степенью 2, то в двоичном представлении есть только одна 1 цифра.Т.е. 10, 100, 100000 и т. Д. Если вы вычтете одно, вы получите целое 1.как 10-1=1, 100-1=11 и т. д. Поэтому, если вы сделаете x&(x-1), вы получите все нули.Таким образом, вы можете использовать приведенную ниже формулу

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

Первый х в приведенном ниже выражении относится к случаю, когда x равно 0.

...