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


Posted in Javascript onNovember 26, 2017

昨天去面试时,面试官问了一道面试题,说如何判断一个数是不是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;
 }
}

结果如下:

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

 方法二

通过二进制的方法可以判断一个数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);
}

 结果如下:

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

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

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

以上这篇js 判断一个数字是不是2的n次方幂的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
关闭浏览器时提示onbeforeunload事件
Dec 25 Javascript
js获取select标签的值且兼容IE与firefox
Dec 30 Javascript
JavaScript中的cacheStorage使用详解
Jul 29 Javascript
javascript实现列表切换效果
May 02 Javascript
Ajax使用原生态JS验证用户名是否存在
May 26 Javascript
使用JavaScript进行表单校验功能
Aug 01 Javascript
在vue中使用公共过滤器filter的方法
Jun 26 Javascript
从零开始封装自己的自定义Vue组件
Oct 09 Javascript
Vue组件Draggable实现拖拽功能
Dec 01 Javascript
微信小程序实现页面浮动导航
Jan 08 Javascript
vue组件内部引入外部js文件的方法
Jan 18 Javascript
开发Node CLI构建微信小程序脚手架的示例
Mar 27 Javascript
微信小程序wx.request实现后台数据交互功能分析
Nov 25 #Javascript
利用JavaScript的%做隔行换色的实例
Nov 25 #Javascript
zTree节点文字过多的处理方法
Nov 24 #Javascript
JavaScript程序设计高级算法之动态规划实例分析
Nov 24 #Javascript
详解vue-cli脚手架build目录中的dev-server.js配置文件
Nov 24 #Javascript
javaScript和jQuery自动加载简单代码实现方法
Nov 24 #jQuery
Bootstrap modal只加载一次数据的解决办法(推荐)
Nov 24 #Javascript
You might like
ThinkPHP使用smarty模板引擎的方法
2014/07/01 PHP
详解php比较操作符的安全问题
2015/12/03 PHP
PHP实现导出带样式的Excel
2016/08/28 PHP
JSQL  一个 web DB 的封装
2010/05/05 Javascript
基于JQUERY的两个ListBox子项互相调整的实现代码
2011/05/07 Javascript
屏蔽IE弹出"您查看的网页正在试图关闭窗口,是否关闭此窗口"的方法
2013/12/31 Javascript
js正则表达式匹配数字字母下划线等
2015/04/14 Javascript
jQuery获取table行数并输出单元格内容的实现方法
2016/06/30 Javascript
js插件dropload上拉下滑加载数据实例解析
2016/07/27 Javascript
easyui导出excel无法弹出下载框的快速解决方法
2016/11/10 Javascript
bootstrap table 多选框分页保留示例代码
2017/03/08 Javascript
深入理解Node.js中的进程管理
2017/03/13 Javascript
JavaScript 函数的定义-调用、注意事项
2017/04/16 Javascript
Angular.js中控制器之间的传值详解
2017/04/24 Javascript
BootStrap daterangepicker 双日历控件
2017/06/02 Javascript
JS 使用 window对象的print方法实现分页打印功能
2018/05/16 Javascript
Vue.js中 v-model 指令的修饰符详解
2018/12/03 Javascript
vue项目刷新当前页面的三种方法
2018/12/04 Javascript
Android 兼容性问题:java.lang.UnsupportedOperationException解决办法
2017/03/19 Python
Python3安装Scrapy的方法步骤
2017/11/23 Python
在Django中URL正则表达式匹配的方法
2018/12/20 Python
对python中Librosa的mfcc步骤详解
2019/01/09 Python
Python帮你识破双11的套路
2019/11/11 Python
对tensorflow 中tile函数的使用详解
2020/02/07 Python
tensorflow 实现自定义梯度反向传播代码
2020/02/10 Python
Python QT组件库qtwidgets的使用
2020/11/02 Python
西班牙床垫网上商店:Colchones.es
2018/05/06 全球购物
物业管理公司实习生自我鉴定
2013/09/19 职场文书
第一批党的群众路线教育实践活动工作总结
2014/03/03 职场文书
物流管理专业毕业生自荐信
2014/03/04 职场文书
2014年计划生育协会工作总结
2014/11/14 职场文书
2015年个人剖析材料范文
2014/12/29 职场文书
贷款工作证明模板
2015/06/12 职场文书
党员公开承诺书2016
2016/03/24 职场文书
Vue提供的三种调试方式你知道吗
2022/01/18 Vue.js