Проблема

Как проверить, является ли целое число степенью двойки?

Решение

3 простых примера, чтобы проверить, является ли какое-либо целое число степенью двойки или нет.
У нас есть три метода, в которых для решения этой проблемы используются побитовый оператор, метод грубой силы и операторы битового сдвига.
Метод, использующий побитовые операторы, не может проверить, является ли ноль степенью 2 или нет,
и работает только для целого числа, которое больше или равно 1.

public class PowerOf2Test {
    public static void main(String args[]) {
        int[] numbers = {0,1,2,6,8};
        for(int num: numbers){
            System.out.println("isPowerOfTwo()-- is " + num + 
             " power of two in Java :" + isPowerOfTwo(num));
            System.out.println("powerOfTwo()-- is " + num + 
             " power of two in Java :" + powerOfTwo(num));
            System.out.println("checkPowerOfTwo()-- is " + num + 
             " power of two in Java :" + checkPowerOfTwo(num));
            System.out.println("---------------------------------
               ---------------------");
        }         
    }
    /*
     * checking if number is power of 2 using bit shift 
     * operator in java
     * e.g. 4 in binary format is 
     * "0000 0000 0000 0000 0000 0000 0000 0100";
     * and -4 is                  
     * "1111 1111 1111 1111 1111 1111 1111 1100";
     * and 4&-4 will be           
     * "0000 0000 0000 0000 0000 0000 0000 0100"
     */
     private static boolean isPowerOfTwo(int number) {
        if(number <=0){
            throw new IllegalArgumentException("number: " + number);
        }
        if ((number & -number) == number) {
            return true;
        }
        return false;
     }
     /*
     * checking if number is power of 2 using brute force
     * starts with 1, multiplying with 2 it will eventually 
     * be same as original number
     */
     private static boolean powerOfTwo(int number){
        int square = 1;
        while(number >= square){
            if(number == square){
                return true;
            }
            square = square*2;
        }
        return false;
     }
     /*
     * find if an integer number is power of 2 or not 
     * using bit shift operator
     */  
     private static boolean checkPowerOfTwo(int number){
         if(number <=0){
            throw new IllegalArgumentException("number: " + number);
        }
        return ((number & (number -1)) == 0);
     }
}
Output:
isPowerOfTwo()-- is 0 power of two in Java :true
powerOfTwo()-- is 0 power of two in Java :false
checkPowerOfTwo()-- is 0 power of two in Java :true
-----------------------------------------------------------
isPowerOfTwo()-- is 1 power of two in Java :true
powerOfTwo()-- is 1 power of two in Java :true
checkPowerOfTwo()-- is 1 power of two in Java :true
-----------------------------------------------------------
isPowerOfTwo()-- is 2 power of two in Java :true
powerOfTwo()-- is 2 power of two in Java :true
checkPowerOfTwo()-- is 2 power of two in Java :true
-----------------------------------------------------------
isPowerOfTwo()-- is 6 power of two in Java :false
powerOfTwo()-- is 6 power of two in Java :false
checkPowerOfTwo()-- is 6 power of two in Java :false
-----------------------------------------------------------
isPowerOfTwo()-- is 8 power of two in Java :true
powerOfTwo()-- is 8 power of two in Java :true
checkPowerOfTwo()-- is 8 power of two in Java :true
-----------------------------------------------------------

Подробнее: http://javarevisited.blogspot.com/2013/05/how-to-check-if-integer-number-is-power-of-two-example.html#ixzz3uulixOTO