为什么80%的码农都做不了架构师?>>>   

今天写了篇文章判断一个数是否是2的N次方http://www.cnblogs.com/mybear/archive/2011/03/03/1969851.html

没想到各位的热情着么高,呵呵,感谢每一位关注的朋友,本来也想写篇关于回复中每个方法的介绍的,不过被undefined

朋友抢了先,各位可以参考他的两篇文章

1)一名曾经的测试人员, 看大家贡献的关于2的n次方的检测的代码

2)结果正确不代表思路正确

根据回复,我整理出了6个正确的方法,如下

?
#region Neeley http://www.cnblogs.com/mybear/
public static bool Check1( int num)
{
     int i = 1;
     while ( true )
     {
         if (i > num)
             return false ;
         if (i == num)
             return true ;
         i = i * 2;
     }
}
public static bool Check2( int num)
{
     if (num == 1)
         return true ;
     else
     {
         do
         {
             if (num % 2 == 0)
                 num = num / 2;
             else
                 return false ;
         }
         while (num != 1);
         return true ;
     }
}
#endregion
#region 执手泪眼 http://www.cnblogs.com/liszt/
public static bool Check3( int num)
{
     double result = Math.Log(num, 2);
     return result.ToString().IndexOf( "." ) < 0;
}
#endregion
#region llzhzhb http://http://home.cnblogs.com/141189/
//x << (31 - i) >> 31 就 是取二进制数字中的第i+1位
public static bool Check4( int num)
{
     uint x =Convert.ToUInt32(num);
     bool y = false ;
     for ( int i = 0; i < 32; i++)
     {
         if (x << (31 - i) >> 31 == 1)
             if (!y)
                 y = true ;
             else
             {
                 y = false ;
                 break ;
             }
     }
     return y;
}
#endregion
#region 西夏普躲耐特 http://www.cnblogs.com/hncjp1989/
public static bool Check5( int num)
{
     return ((num & (num - 1)) == 0) ? true : false ;
}
#endregion
#region lipan http://www.cnblogs.com/lipan/
public static bool Check6( int num)
{
     if (num == 1)
         return true ;
     return Regex.IsMatch(Convert.ToString(num, 2), "^10+$" );
}
#endregion

此六种方法从上到下一次是Check1----Check6,循环1到99999999次,开发环境VS2008+Window7,使用Release编译,执行结果是:

从上图可以看到,最快当然还是x & (x - 1)

转载于:https://my.oschina.net/qihh/blog/55850

判断是否是2的N次方各方法运行速度比较相关推荐

  1. 在C语言中如何判断一个数是不是2的幂次方,判断一个数是否为2的幂次方的方法...

    对于如何判断一个数是否为2的幂次方这个问题是很多新手们都好奇的,今天我们就带着这个疑问跟小编去看看判断一个数是否为2的幂次方的方法吧,感兴趣的小伙伴们赶紧收藏起来. 将2的幂次方写成二进制形式后,很容 ...

  2. python中函数和方法的区别?Python编程判断当前获取的对象是函数还是方法

    python中函数和方法的区别?Python编程判断当前获取的对象是函数还是方法 目录

  3. php如何查询数据是否存在,PHP判断数据库中的记录是否存在的方法,php数据库_PHP教程...

    PHP判断数据库中的记录是否存在的方法,php数据库 本文实例讲述了PHP判断数据库中的记录是否存在的方法.分享给大家供大家参考. 具体实现代码如下: 复制代码 代码如下: $sql="se ...

  4. C#中判断文件夹或文件是否存在的方法

    c#中操作IO非常简单,下面介绍如何判断文件夹或文件是否存在的方法.  代码如下:  //判断文件夹是否存在,不存在则创建文件夹  if (!System.IO.Directory.Exists(@& ...

  5. php 判断类型array,判断一个变量是数组Array类型的方法_javascript技巧

    在很多时候,我们都需要对一个变量进行数组类型的判断.JavaScript中如何判断一个变量是数组Array类型呢?我最近研究了一下,并分享给大家,希望能对大家有所帮助. JavaScript中检测对象 ...

  6. Java 判断字符串是否为空的四种方法、优缺点与注意事项

    以下是Java 判断字符串是否为空的四种方法: 方法一: 最多人使用的一个方法, 直观, 方便, 但效率很低: if(s == null ||"".equals(s)); 方法二: ...

  7. python判断文件是否为空文件对象_判断Python对象是不是为文件对象的方法有哪些...

    判断Python对象是不是为文件对象的方法有哪些 发布时间:2020-08-13 14:01:00 来源:亿速云 阅读:76 作者:小新 这篇文章主要介绍判断Python对象是不是为文件对象的方法有哪 ...

  8. python重复元素判定_Python实现判断给定列表是否有重复元素的方法

    本文实例讲述了Python实现判断给定列表是否有重复元素的方法.分享给大家供大家参考,具体如下: 题目很简单,只是简单温习一个方法,most_common,这是collection模块中Counter ...

  9. python判断是不是文件夹_Python判断文件和文件夹是否存在的方法

    一.python判断文件和文件夹是否存在.创建文件夹 复制代码代码如下: >>> import os >>> os.path.exists("d:/ass ...

最新文章

  1. C#精髓【月儿原创】第一讲 使用垃圾回收器
  2. 舵机控制器STC8G1K
  3. Activity具体解释(生命周期、以各种方式启动Activity、状态保存,全然退出等)...
  4. 小程序服务器角色,小程序在我们的生活中扮演什么角色?
  5. Debian9.1下安装后没有ifconfig命令
  6. 连载:阿里巴巴大数据实践—数据服务
  7. html5-6 Frame框架窗口类型
  8. 前端学习(932):mouseenter和mouseover区别
  9. QTP和WinRunner区别
  10. C语言变量长度在32位和64位处理器上的关系
  11. DIY一套10倍\20倍\30倍光学变焦高清航拍方案(变焦云台相机方案)
  12. 中国电信第三大IDC机房落户南海
  13. 一车abs线路怎么量_神木沥青拌合站烧火油怎么购买更划算
  14. git 命令 —— checkout 与分支管理
  15. 8.从Paxos到Zookeeper分布式一致性原理与实践---Zookeeper 运维
  16. python把utf8编码转为gbk_Python:UTF-8编码转换成GBK编码
  17. i春秋Web渗透测试工程师(初级)学习笔记(第三章)
  18. C++核心准则边译边学-F.6 如果函数不会抛出异常,则声明为noexcept
  19. python操作excel遇到一系列问题
  20. 1700802088 韩晓忠

热门文章

  1. Delphi控件开发浅入深出(三)
  2. SPRING IN ACTION 第4版笔记-第三章ADVANCING WIRING-008-SpEL介绍
  3. 使用PagedDataSource类实现DataList和Repeater控件的分页显示
  4. spring中@Value的使用(读取配置文件信息)
  5. Hadoop组件启停命令和服务链接汇总
  6. Springboot应用中线程池配置教程(2021版)
  7. angelababy机器人唱_被Angelababy、周震南等摸头杀?这个机器人为什么受宠
  8. 【CentOS 7笔记5】,主机互相登陆#
  9. Kafka是如何处理Netflix每天2万亿条消息的?
  10. nginx安装到指定目录