最近在OJ上做题,遇到一道题,其中一个细节就是需要判断一个数是否为2的幂次方。初看似乎很简单,可我想来想去,竟然无甚好办法。最后我用一个笨办法解决了,那就是将2 4 8 16 32… …存到一个数组里,遍历一遍数组就知道了。但是这个办法着实不优美。

下面介绍一个好办法

  • (n & n - 1) == 0

将2的幂次方写成二进制形式后,很容易就会发现有一个特点:二进制中只有一个1,并且1后面跟了n个0。如果将这个数减去1后会发现,仅有的那个1会变为0,而原来的那n个0会变为1;因此将原来的数与减去1后的数字进行与运算后会发现为零。

  • & 按位与运算符:两位同时为1,结果才为1,否则为0
  • | 按位或运算符:两位中有一个为1,结果就为1
  • ^ 异或运算符:两位值不同,结果为1,否则为0
  • ~ 取反运算符:将0变1,1变0,就是反着来
  • << 左移运算符:各二进制位全部左移若干位,左边丢弃,右边补0
  • >> 右移运算符:各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃
  • 两个不同长度的数据进行位运算时,系统会将二者按右端对齐,然后进行位运算。短的那个数据如果是负数,左边补1,否则补0

如何判断一个数是否为2的幂次方相关推荐

  1. 快速判断一个数是否是4的幂次方,若是,并判断出来是多少次方! .

    将4的幂次方写成二进制形式后,很容易就会发现有一个特点:二进制中只有一个1(1在奇数位置),并且1后面跟了偶数个0: 因此问题可以转化为判断1后面是否跟了偶数个0就可以了. 4的整数次幂的二进制数都为 ...

  2. 快速判断一个数是否是2的幂次方

    public class Test {public static void main(String[] args) {int num = 10;if (0 == (num & (num - 1 ...

  3. 快速判断一个数是否是2的幂次方,若是,并判断出来是多少次方!

    将2的幂次方写成二进制形式后,很容易就会发现有一个特点:二进制中只有一个1,并且1后面跟了n个0: 因此问题可以转化为判断1后面是否跟了n个0就可以了. 如果将这个数减去1后会发现,仅有的那个1会变为 ...

  4. C语言编程判断是否为2的幂,C语言判断一个数是否是2的幂次方或4的幂次方

    快速判断一个数是否是2的幂次方,若是,并判断出来是多少次方!将2的幂次方写成二进制形式后,很容易就会发现有一个特点:二进制中只有一个1,并且1后面跟了n个0: 因此问题可以转化为判断1后面是否跟了n个 ...

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

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

  6. C语言判断是不是2的幂次方,C语言判断一个数是否是2的幂次方或4的幂次方

    快速判断一个数是否是2的幂次方,若是,并判断出来是多少次方! 将2的幂次方写成二进制形式后,很容易就会发现有一个特点:二进制中只有一个1,并且1后面跟了n个0: 因此问题可以转化为判断1后面是否跟了n ...

  7. 判断一个数是不是2的指数幂

    判断一个数是不是2的指数幂 求一个数是不是2的指数幂 2^0=1,2^1=2,2^2=4,2^3=8 1 1的二进制为1 2的二进制为10 4的二进制为100 8的二进制为1000 发现只有最高位为1 ...

  8. 随笔-如何判断一个数是否是2的n次方O(1)算法

    题目: 如何判断一个数是否是2的n次方,要求时间复杂度为O(1); 思路:本题考察的是位运算,尤其是对二进制的理解:当一个数为2的n 次方时,整个二进制数,只有他本位是1 其他位为0,如果我们给这个数 ...

  9. c语言判断一个数是否为质数的n次方,C语言中 输入一个数 判断这个数是否为3的N次方 求代码...

    C语言中 输入一个数 判断这个数是否为3的N次方 求代码 答案:4  信息版本:手机版 解决时间 2019-10-03 18:55 已解决 2019-10-03 01:54 C语言中 输入一个数 判断 ...

最新文章

  1. Oracle JDBC连接服务名、SID和tnsnames.ora配置的多种方式
  2. pygame 笔记-8 背景音乐子弹音效
  3. 用脑电波玩游戏,这款VR体验逆天了
  4. python 命令行参数-Python处理命令行参数
  5. flex布局知识点总结
  6. Mysql存储引擎详解
  7. ASP.NET 常用验证
  8. SQL Server定期自动备份
  9. POJ 3660 Cow Contest【传递闭包】
  10. [机器学习-回归算法]一元线性回归用最小二乘法的推导过程
  11. rep( )函数--R语言
  12. hql 占位符_hibernate中如何使用占位符拼接HQL
  13. ECMAscript6 初涉摘抄笔记
  14. Vim简介以及常用命令
  15. 全国高校计算机能力挑战赛真题(一)
  16. Quartz定时任务自学
  17. 要写码,又要做年终总结PPT?高效神器保住你的发际线
  18. php校园学校宿舍管理系统 php毕业设计题目课题选题 php毕业设计项目作品源码(3)班主任和宿舍管理员功能
  19. python数据分析与可视化从入门到精通_零基础学Python爬虫、数据分析与可视化从入门到精通...
  20. Python return函数

热门文章

  1. 360路由器远程连接服务器,“怎样用动态域名实现路由器的远程配置”的解决方案...
  2. 复刻 Unity编辑器 移动的方式
  3. 百度飞桨入选2019世界互联网大会领先科技成果
  4. 计算机体系结构 C4 存储体系
  5. mount命令使用详解
  6. Python五角星的绘画
  7. 6小时精通springcloud第09讲:微服务安全认证
  8. JavaScript 混淆和解密特性
  9. 笛卡尔《谈谈方法》读后感
  10. 《历史的教训》读后感