matlab获取2的整数次幂,如何快速判断正整数是2的N次幂
这个问题可能很多面试的人都遇到过,很多人可能想利用循环来判断,代码可能如下所示: public static boolean isPowOfTwo(int n) {
int temp = 0;
for (int i = 1; ; i++) {
temp = (int) Math.pow(2, i);
if (temp >= n)
break;
}
if (temp == n) return true;
else return false;
}
上面的代码简单明了。但是,这样的方案效率比较低。我们仔细分析一下,正整数是2的n次幂他有什么规律?20=1,21=2,22=4,23=8....这样看是没有什么规律的。但是如果将2的幂次方写成二进制形式后,很容易就会发现有以下两个特点:
1、20=1 -> 0001,21=2 -> 0010,22=4 -> 0100,23=8 -> 1000二进制中只有一个1,并且1后面跟了n个0。
2、如果将这个数减去1后会发现,仅有的那个1会变为0,而原来的那n个0会变为1;因此将原来的数与去减去1后的数字进行与运算后会发现为零((x & x- 1) == 0)。
原因:因为2n换算是二进制为10……0这样的形式,2n-1的二进制为0111...1,两个二进制求与结果为0,例如:16的二进制为10000;15=01111,两者相与的结果为0。计算如下:
10000
&01111
-------
00000
所以可以用下面 public static boolean isPowerOfTwo(int x) {
return x > 0 & (x & (x - 1)) == 0;
}
很简单的一行代码就实现了。细心的读者可能会问:2的n次幂二进制始终都是只有一个1,其它的位数都为0,是否可以判断给定的数转换为二进制来判断其中是否只有1个1来得出给定数是否为2的n次幂呢?答案是不能。因为Integer.MIN_VALUE的二进制只有1个1,但是Integer.MIN_VALUE并不是2的n次幂,所以不能用上面方式来实现。(完)
matlab获取2的整数次幂,如何快速判断正整数是2的N次幂相关推荐
- C语言编程判断是否为2的幂,C语言判断一个数是否是2的幂次方或4的幂次方
快速判断一个数是否是2的幂次方,若是,并判断出来是多少次方!将2的幂次方写成二进制形式后,很容易就会发现有一个特点:二进制中只有一个1,并且1后面跟了n个0: 因此问题可以转化为判断1后面是否跟了n个 ...
- 快速判断一个数是否是4的幂次方,若是,并判断出来是多少次方! .
将4的幂次方写成二进制形式后,很容易就会发现有一个特点:二进制中只有一个1(1在奇数位置),并且1后面跟了偶数个0: 因此问题可以转化为判断1后面是否跟了偶数个0就可以了. 4的整数次幂的二进制数都为 ...
- 快速判断一个数是否是2的幂次方,若是,并判断出来是多少次方!
将2的幂次方写成二进制形式后,很容易就会发现有一个特点:二进制中只有一个1,并且1后面跟了n个0: 因此问题可以转化为判断1后面是否跟了n个0就可以了. 如果将这个数减去1后会发现,仅有的那个1会变为 ...
- 快速判断一个数是否是2的幂次方
public class Test {public static void main(String[] args) {int num = 10;if (0 == (num & (num - 1 ...
- C语言判断是不是2的幂次方,C语言判断一个数是否是2的幂次方或4的幂次方
快速判断一个数是否是2的幂次方,若是,并判断出来是多少次方! 将2的幂次方写成二进制形式后,很容易就会发现有一个特点:二进制中只有一个1,并且1后面跟了n个0: 因此问题可以转化为判断1后面是否跟了n ...
- matlab获取等高线的坐标,[matlab数据拟合曲线]matlab获取等高线的数据
篇一 : matlab获取等高线的数据 contour(X,Y,Z,v)画出Z在向量v所有值处的等高线,如只想画出Z在i处的等高线,则调用contour(X,Y,Z,[i,i]).如果没有图形,可以将 ...
- matlab获取目录中图像名称及路径的递归实现
一个matlab获取目录中图像名称及路径的递归实现~ matlab源文件 getImageList.m [c-sharp] view plaincopyprint? function [ imageL ...
- MATLAB获取屏幕分辨率
1. 获取分辨率 本来设计程序按照1920x1080运行的,后面调了一下系统缩放,分辨率就变了,所以为了更灵活的使用,还是先获取再使用吧 matlab获取屏幕分辨率命令: get(0,'ScreenS ...
- MATLAB colorbar颜色红黄绿,Matlab获取colorbar颜色并转换为需要的CPT文件
问题:如何把图片的colorbar颜色转换为需要的CPT文件 参考Matlab获取文献中的colorbar 解决: (1)将colorbar截图存储成jpg或png格式文件. (2)在Matlab中: ...
最新文章
- c++switch实现猜拳_策略模式+简单工厂+注解消除 if-else/switch-case
- 微信小程序签名(横屏+竖屏)
- CF #737(div2) Ezzat and Two Subsequences 找规律
- Java中的List/Set和Map的区别
- mongodb java数组_MongoDB 基础java数据类型
- 深度学习(七十)darknet 实现编写mobilenet源码
- Oracle 各种语法(一)
- oxp开放型可变长协议_培养开放型领导者
- 点击APPicon之后都发生了什么
- spring整合ehcache
- java并发编程入门_Java并发编程从入门到精通 PDF 下载
- linux强制安装deb,ubuntu强行修改deb安装包依赖
- tensorflow2.X tf.data.Dataset详解
- SQLite管理软件 - SQLiteSpy
- 比微信还方便,一键导出你与 ChatGPT 的聊天记录,而且是 Markdown 格式!
- 嵌入式实时操作系统11——操作系统内核运行原理
- 人生六十才开始(转载)
- React 性能优化完全指南,将自己这几年的心血总结成这篇!
- abaqus算界面脱粘_ABAQUS粘聚力模型( Cohesive Model ) 应用小结
- 基于eclipse的android项目实战—博学谷(五)“我”的模块