如何判断一个数是否为2的幂次方
最近在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的幂次方相关推荐
- 快速判断一个数是否是4的幂次方,若是,并判断出来是多少次方! .
将4的幂次方写成二进制形式后,很容易就会发现有一个特点:二进制中只有一个1(1在奇数位置),并且1后面跟了偶数个0: 因此问题可以转化为判断1后面是否跟了偶数个0就可以了. 4的整数次幂的二进制数都为 ...
- 快速判断一个数是否是2的幂次方
public class Test {public static void main(String[] args) {int num = 10;if (0 == (num & (num - 1 ...
- 快速判断一个数是否是2的幂次方,若是,并判断出来是多少次方!
将2的幂次方写成二进制形式后,很容易就会发现有一个特点:二进制中只有一个1,并且1后面跟了n个0: 因此问题可以转化为判断1后面是否跟了n个0就可以了. 如果将这个数减去1后会发现,仅有的那个1会变为 ...
- C语言编程判断是否为2的幂,C语言判断一个数是否是2的幂次方或4的幂次方
快速判断一个数是否是2的幂次方,若是,并判断出来是多少次方!将2的幂次方写成二进制形式后,很容易就会发现有一个特点:二进制中只有一个1,并且1后面跟了n个0: 因此问题可以转化为判断1后面是否跟了n个 ...
- 在C语言中如何判断一个数是不是2的幂次方,判断一个数是否为2的幂次方的方法...
对于如何判断一个数是否为2的幂次方这个问题是很多新手们都好奇的,今天我们就带着这个疑问跟小编去看看判断一个数是否为2的幂次方的方法吧,感兴趣的小伙伴们赶紧收藏起来. 将2的幂次方写成二进制形式后,很容 ...
- C语言判断是不是2的幂次方,C语言判断一个数是否是2的幂次方或4的幂次方
快速判断一个数是否是2的幂次方,若是,并判断出来是多少次方! 将2的幂次方写成二进制形式后,很容易就会发现有一个特点:二进制中只有一个1,并且1后面跟了n个0: 因此问题可以转化为判断1后面是否跟了n ...
- 判断一个数是不是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 ...
- 随笔-如何判断一个数是否是2的n次方O(1)算法
题目: 如何判断一个数是否是2的n次方,要求时间复杂度为O(1); 思路:本题考察的是位运算,尤其是对二进制的理解:当一个数为2的n 次方时,整个二进制数,只有他本位是1 其他位为0,如果我们给这个数 ...
- c语言判断一个数是否为质数的n次方,C语言中 输入一个数 判断这个数是否为3的N次方 求代码...
C语言中 输入一个数 判断这个数是否为3的N次方 求代码 答案:4 信息版本:手机版 解决时间 2019-10-03 18:55 已解决 2019-10-03 01:54 C语言中 输入一个数 判断 ...
最新文章
- Oracle JDBC连接服务名、SID和tnsnames.ora配置的多种方式
- pygame 笔记-8 背景音乐子弹音效
- 用脑电波玩游戏,这款VR体验逆天了
- python 命令行参数-Python处理命令行参数
- flex布局知识点总结
- Mysql存储引擎详解
- ASP.NET 常用验证
- SQL Server定期自动备份
- POJ 3660 Cow Contest【传递闭包】
- [机器学习-回归算法]一元线性回归用最小二乘法的推导过程
- rep( )函数--R语言
- hql 占位符_hibernate中如何使用占位符拼接HQL
- ECMAscript6 初涉摘抄笔记
- Vim简介以及常用命令
- 全国高校计算机能力挑战赛真题(一)
- Quartz定时任务自学
- 要写码,又要做年终总结PPT?高效神器保住你的发际线
- php校园学校宿舍管理系统 php毕业设计题目课题选题 php毕业设计项目作品源码(3)班主任和宿舍管理员功能
- python数据分析与可视化从入门到精通_零基础学Python爬虫、数据分析与可视化从入门到精通...
- Python return函数