码迷,mamicode.com
首页 > Web开发 > 详细

js 如何判断一个数字是不是2的n次方幂

时间:2017-08-23 11:54:56      阅读:234      评论:0      收藏:0      [点我收藏+]

标签:image   其他   check   src   func   简单   条件判断   是的   代码   

  昨天去面试时,面试官问了一道面试题,说如何判断一个数是不是2的n次方幂,我当时不知道2的n次方幂是什么(糗大发了??),还好给我解释了一下。最后回家上网查查资料,整理了一下方法。

  方法一 

     如何判断一个数是否是2的n次方幂,其简单判断方法就是这个数num直接除2,若余数为0,则num/2再除2,再判断是不是余数是不是0,是的话继续按上一步来,直到最后为num=1。

   比如: 2  2%2=0  (2/2)=1                         是

                 4  4%2=0  (4/2)%2=0  (4/2/2)=1    是

            6  6%2=0  (6/2)%2=1                         不是

                      7  7%2=1                                           不是

                      24 24%2=0   (24/2)%2=0   (24/2/2)%2=0   (24/2/2/2)%2=1    不是

 

    代码实现:

function check(num){
    if(num != 1){
        while(num != 1){
            if(num%2 == 0){
                num = num / 2;
            }else{
                return false;
            }

        }
        return true;
    }else{
        return true;
    }
}

结果如下:

技术分享

 

方法二 

  通过二进制的方法可以判断一个数num是不是2的n次方幂,规律可知,只要是2的次方幂,必然是最高位为1,其余为0,当num-1时,则最高位是0,其余是1.

  按位与运算:  1&1=1  0&1=0 0&0=0 1&0=0

    2     --->   10                   3    --->   11            

    4     --->   100                 6    --->   110           

    8     --->   1000               7    --->   111

 

 例子:   8   的二进制   1000      8-1 的二进制  0111    按位与运算      1000&0111    -->  0000    所以8是2的n次方幂。

               9   的二进制   1001      9-1 的二进制  1000    按位与运算      1001&1000   ---> 1000   所以9不是2的次方幂。

               24  的二进制  11000     24-1 的二进制  10111  按位与运算    11000&10111  ---> 10000  所以24不是2的次方幂。

      可以通过num.toString(2)来写出num的二进制。

代码实现:

function check(num){
    return (num > 0) && ((num & (num - 1)) == 0);
}

结果如下:

技术分享

  另外 1也是2的0次方幂。

  还有其他条件没有写出,这个方法是来判断一个数是不是2的n次方幂,并没有写出这个数是不是整数,可以的话,自己添加条件判断。

js 如何判断一个数字是不是2的n次方幂

标签:image   其他   check   src   func   简单   条件判断   是的   代码   

原文地址:http://www.cnblogs.com/sqh17/p/7414417.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!