Java中如何判断整数是否是2的幂

       怎样判断某个整数是否是2的幂也是程序员面试中经常被问到的问题之一,奇怪的是,这个看似很容易回答的问题,对很多开发人员来说却并不那么简单。很多java开发人员,新手和经验少的人,叫他去写一个方法判断某个整数是否是2的幂,他会感觉很困难。这个可能有很多原因,但是希望至少能给出一般的解决方案。如何用二进制表示正数和负数对于那些很熟悉位移操作的人来说,那是再简单不过了。由于负数是用补码的形式表示,你可以通过它的位组合来判断任何一个数是否是2的幂。记住判断一个整数是否是2的幂和判断这个数是否是偶数或者奇数是不同的,一个数是偶数,但是它不一定是2的幂,比如6是偶数,但是它不是2的幂。

三种方法来判断某个整数是否是2的幂

在这篇文章中我们来看看3个简单的例子用来判断某个整数是否是2的幂。我们有三个方法,分别使用按位操作、一般操作和位移操作来解决这个问题。使用按位操作方法不能检测0是否是2的幂,只能检测大于等于1的整数。下面是3个简单方法用来检测某个整数是否是2的幂的代码:

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);
    }
}

以上是关于检测某个整数是否是2的幂的全部。如果你有更好的方法,请贴出来参考参考,(*^__^*)

原文出处:http://javarevisited.blogspot.com/2013/05/how-to-check-if-integer-number-is-power-of-two-example.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值