Проверка является ли число степенью 2, на 0 ничего не выводит

учусь Java. Одно из заданий написать программу, которая будет проверять является ли число степенью двойки. Я написал следующий код, но на 0 он ничего не выводит и я не понимаю почему.


    public static void main(String[] args) {
        int namber = 0;
        namber = Math.abs(namber);
        boolean yesNoot;
        while (namber%2==0){
            namber=namber/2;
        }
        if (namber !=1)
            yesNoot = false;
        else
            yesNoot = true;
        System.out.println(yesNoot);

При чём другой вариант решения, который я нашёл в интернете реагирует на 0 точно также:


    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.print("Input num: ");
        int num = in.nextInt();

        while (num != 1 && num % 2 == 0) {
            num /= 2;
        }

        System.out.println(num == 1 ? "YES" : "NO");
    }

Ответы (3 шт):

Автор решения: Aziz Umarov

А если так

public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    System.out.print("Input num: ");
    int num = in.nextInt();

    while (num != 1 && num % 2 == 0 && num > 0) {
        num /= 2;
    }

    System.out.println(num == 1 ? "YES" : "NO");
}
→ Ссылка
Автор решения: zTrap

Самый быстрый вариант, это посмотреть на биты в числе. Если "включён" (равен единице) только один бит, число - степень двойки.

private void isPowerOfTwo(int number) {
    if (Integer.bitCount(number) == 1) {
        System.out.println("YES");
    } else {
        System.out.println("NO");
    }
}

На основе этого можно быстро найти следующую ближайшую степень двойки относительно вводимого числа. Нужно лишь взять самый высокий (левый бит) и сместить его ещё левее.

private void nextPowerOfTwo(int number) {
    if (Integer.bitCount(number) == 1) {
        // здесь используется long для того, чтобы при смещении бита у нас не переполнился int
        // актуально если ввести число Integer.MAX_VALUE
        long highestBit = Integer.highestOneBit(number);
        System.out.println(highestBit << 1);
    } else {
        System.out.println(number);
    }
}
→ Ссылка
Автор решения: Drugs

Вот пожалуйста - универсальный метод по определению - является ли число степенью двойки.

 public static void main(String[] args) {
        int a = -2;
        isPowerOfTwo(a);
      }
    public static boolean isPowerOfTwo(int value) {
        if (Integer.bitCount(Math.abs(value)) == 1) {
        return true;
    } else {
        return false;
    }

    }
→ Ссылка