当前位置:首页 > 日记 > 正文

js 判断一个数字是不是2的n次方幂的实例

js 判断一个数字是不是2的n次方幂的实例

昨天去面试时,面试官问了一道面试题,说如何判断一个数是不是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次方幂的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

相关文章

如何解决Web服务器能Ping通但不能

如何解决Web服务器能Ping通但不能

服务器,如何解决,电脑软件,Web,Ping,访问Web服务器是许多局域网用户经常要做的一项“功课”,在频繁访问过程中,不少朋友积累了一些Web服务器访问经验,这些经验常常会帮助他们快速解决一些无法访问的小故障。不过,本文下面贡献出来的W…

Word中根号怎么正确的输入

Word中根号怎么正确的输入

输入,根号,正确,电脑软件,Word,  在高中数学中有个公式经常会被用到,那就是根号。那么许多朋友在使用Word中不会输入这个“根号”,这个确实这是个难倒不少人的问题。以下是小编为您带来的关于Word中正确输入根号,希望对您有所帮助…

ps怎么设计彩色的卡通树木图标?

ps怎么设计彩色的卡通树木图标?

图标,树木,彩色,卡通,电脑软件,想要绘制彩色卡通的树木图形,该怎么绘制呢?下面我们就来看看详细的教程。软件名称:Adobe Photoshop 8.0 中文完整绿色破解版软件大小:150.1MB更新时间:2015-11-041、直接用钢笔工具绘制出这个树木图标当中的一棵树…

基于daterangepicker日历插件使用

基于daterangepicker日历插件使用

参数,插件使用,日历,电脑软件,daterangepicker,显示具体时间时分秒:timePicker设置为true,//有些资料写的pickerTime不太对重点大坑:修改时间默认展示格式,把fomat写在locale中,网上很多资料说直接写在daterangepicker属性中,这样是不生效的。起…

win10取消开机登陆密码

win10取消开机登陆密码

取消,登陆密码,电脑软件,自从系统升级到win10后,就出现了开机密码,电脑设置开机密码肯定是为了安全,但是自己的家用电脑有开机密码就显得有点鸡肋了,不但每次开机都要输入密码,而且电脑时不时的在死机重启几次,一天没事净输入开机密码了,实在是烦…

AI怎么使用复合路径制作简单的图形

AI怎么使用复合路径制作简单的图形

复合,图形,路径,简单,电脑软件,AI怎么使用复合路径制作简单的图形?ai绘制图形的时候,想要使用复合路径功能,该怎么使用呢?下面我们就来看看详细的教程,很简单,需要的朋友可以参考下。软件名称:Adobe Illustrator CC(AI) 2016破解版 64位 简体中文…

ps怎么复制标注? ps排版复制标注的

ps怎么复制标注? ps排版复制标注的

标注,教程,电脑软件,ps,ps排版的时候会使用标注,如果需要标注,该怎么复制标注呢?下面我们就来看看详细的教程。软件名称:Adobe Photoshop 8.0 中文完整绿色破解版软件大小:150.1MB更新时间:2015-11-041、首先,我们需要选择标注的颜色,标注的颜色最…

Ajax请求WebService跨域问题的解决

Ajax请求WebService跨域问题的解决

跨域问题,解决方案,请求,电脑软件,Ajax,1、背景用Jquery中Ajax方式在asp.net开发环境中WebService接口的调用2、出现的问题原因分析:浏览器同源策略的影响(即JavaScript或Cookie只能访问同域下的内容);3、解决方案:(1) JSONP:只支持GET方式(2)…

jQuery绑定事件方法及区别 | bind,

jQuery绑定事件方法及区别 | bind,

绑定事件,方法,区别,电脑软件,live,第一种方式:$(document).ready(function(){ $("#clickme").click(function(){ alert("hello world click") })})第二种方式(简写方式为第一种):$('#clickmebind').bind("click", function(){ alert(…

PHP使用栈解决约瑟夫环问题算法示

PHP使用栈解决约瑟夫环问题算法示

算法示例,约瑟夫,电脑软件,PHP,本文实例讲述了PHP使用栈解决约瑟夫环问题算法。分享给大家供大家参考,具体如下:约瑟夫环问题: 39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓。于是决定了自杀方式,41个人排…

XP安装IIS时提示 “Failed to acce

XP安装IIS时提示 “Failed to acce

安装,提示,解决办法,电脑软件,IIS,先装.NET Framework,后装IIS ,将导致问题:“Failed to access IIS metabase”,无法浏览页面。原因:IIS没有注册解决办法:在CMD中进入目录C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727,运行aspn…