一个数是2的幂次方

[算法]快速判断一个数是否是2的幂次方 #include<stdio.h> #include<stdlib.h> int main(void) { int Number; scanf_s("%d", &Number); if (0 == (Number & (Number - 1))) { printf("Success.\n"); } else { printf("Error.\n"); } syste 阅读详情

关键字: 2 power 幂

一个数是2的幂次方,那么这个数的二进制位数中,只能有一位数值为1.

 

例如:10000, 100, 1等等。

 

从中可以看到,如果把这个数减去1,那么结果值的2进制位应该如下:1111,11,0等等。

 

这两个数的特点是:他们做或的时候,得到的结果是他们的和,例如:

 

10000和1111的或结果是11111, 100和11的或值是111,1和0的或是1。

 

所以我们可以如果实现一个方法判断一个数是否是2的幂次方:

 

Java代码 复制代码
  1. public static boolean is2Power(int number){   
  2.     if(number<=0){   
  3.         return false;   
  4.     }   
  5.     return (number|(number-1))==(2*number-1);   
  6. }  
	public static boolean is2Power(int number){
		if(number<=0){
			return false;
		}
		return (number|(number-1))==(2*number-1);
	}

 

做一个测试:

 

Java代码 复制代码
  1. for(int i = 0;i<1000;i++){   
  2.     if(is2Power(i)){   
  3.         System.out.println(i);   
  4.     }   
  5. }  
		for(int i = 0;i<1000;i++){
			if(is2Power(i)){
				System.out.println(i);
			}
		}

 

 

得到的结果是:

 

Java代码 复制代码
  1. 1  
  2. 2  
  3. 4  
  4. 8  
  5. 16  
  6. 32  
  7. 64  
  8. 128  
  9. 256  
  10. 512  
1
2
4
8
16
32
64
128
256
512

 

补充(另一种实现方法):

 

也可以通过对1的移位来实现。还是上面说的,如果一个数是2的幂,那么它的二进制表示中就只有一位1,所以如果对数1进行移位操作,总会在移到某个位的时候和这个数相等。所以这个实现如下:

 

Java代码 复制代码
  1. public static boolean is2Power(int number){   
  2.     int j = 1;   
  3.     while (number>j) {   
  4.         j<<=1;   
  5.     }   
  6.     return j==number?true:false;   
  7. }  
	public static boolean is2Power(int number){
		int j = 1;
		while (number>j) {
			j<<=1;
		}
		return j==number?true:false;
	}

 

 

验证:

 

Java代码 复制代码
  1. for(int i = 0;i<10000;i++){   
  2.     if(is2Power(i)){   
  3.         System.out.println(i);   
  4.     }   
  5. }  
		for(int i = 0;i<10000;i++){
			if(is2Power(i)){
				System.out.println(i);
			}
		}

 

 

结果:

Java代码 复制代码
  1. 1  
  2. 2  
  3. 4  
  4. 8  
  5. 16  
  6. 32  
  7. 64  
  8. 128  
  9. 256  
  10. 512  
  11. 1024  
  12. 2048  
  13. 4096  
  14. 8192  
深度解析:Android开发工程师(嵌入式系统方向)职位 - 技术需求、面试准备与发展路径 本文深入分析了嵌入式Android开发工程师的岗位要求和技术内涵。该职位需要掌握C/C++、Linux系统编程、硬件接口等核心技术,能够进行Android系统底层定制开发,包括HAL层实现、Framework修改、性能优化等工作。文章详细解读了岗位职责,梳理了必备技术栈,提供了针对性的面试问题与参考答案,并探讨了职业发展路径。这类岗位要求开发者兼具软件工程能力和硬件基础知识,适合在智能电视、机顶盒、车载系统等嵌入式领域发展的技术人员。 阅读详情

相关推荐

MIPS-5级流水线CPU

一、流水线CPU 流水线CPU就是指将一条分解为多步,在同一周期内进行多条指令的同时执行。MIPS五级流水线就是将指令分为:取指(IF),译码(ID),执行(EX),访存(MEM),写回(WB)五个阶段。举个例子: 比如第二条指令lui $t2,0x2100 在流水线CPU中执行的就是 可以看到在200-300ns的周期里,IF阶段取到0x00400004处的指令,300-400ns,这条指令到了ID阶段,而IF阶段执行下一条指令。400-500ns,执行这条指令,ALU的结果为0x2100

weixin_43877853的博客 2万+

如何判断一个数是否为2的幂次方

对于这个问题,有三种方法;但是他们的中心思想都是二进制; 方法一:统计该数的二进制中1的个数;如果个数为1就是,否则就不是; 方法二:x == x&(-x) 由于x&(-x)返回的是从右到左第一个1所表示的大小;对于110010000 返回的就是 10000;所以可以用来判断; 方法三:x&(x-1)==0 举个例子:1000 它减1变成 0111 与运算得0 所以是...

小冰球 8016

Halcon相机标定实战:从参数设置到精度优化全解析

本文详细解析Halcon相机标定的全流程,从基础概念到实战技巧,涵盖参数设置、精度优化及常见问题解决方案。通过实际案例和代码示例,帮助读者掌握工业视觉项目中相机标定的关键技术,提升测量精度和系统稳定性。

weixin_29279153的博客 322

判断2的幂(简单题)

判断2的幂的几种方式

pcw_314的博客 1499

VSCode+PlatformIO新建工程卡成狗?3步提速大法实测有效(附镜像源配置)

针对VSCode+PlatformIO新建工程时因依赖下载缓慢导致的加载慢问题,本文提供了三步核心提速方案。通过配置Python环境变量、修改PlatformIO插件设置以使用国内镜像源,并优化pip配置文件,实测可大幅缩短工程创建时间,有效解决创建工程卡顿的痛点。

delta的博客 711

5G 网络的移动性管理上下文对比介绍

5G 网络的移动性管理上下文对比介绍 4G/5G MM移动性管理机制对比 5G引入了新移动性管理状态,通过mobility pattern(移动方式)实现按需的移动性管理等。 MM的相关状态分为一下几种: RM状态(用户注册管理 注册态/非注册态)和CM状态(用户连接态/空闲态)独立;RM状态标识UE是否注册到网络,CM状态标识UE和核心网的信令连接是否存在。 RAN侧引入RRC-inactive state:UE(用户端)对于CN(核心网)而言处于连接态,对RAN(接入网)而言处于Ld..

m0_59032675的博客 4822

判断一个数是否是2的幂

原理 如果一个数是2的幂,那么一定是00100这种格式 2的二进制为 0000 0010 4的二进制为 0000 0100 8的二进制为 0000 1000 16的二进制为0001 0000 所以n和n-1做&预算,一定为0 代码如下 bool is_power_of_2(uint32_t n) { if (n == 0) { return false; } return (n&(n-1)) == 0; } ...

papaya的博客 925

DID实战指南:从平行趋势检验到PSM-DID的Stata全流程解析

本文详细解析了双重差分法(DID)在政策评估中的应用,从平行趋势检验到PSM-DID的Stata全流程操作。通过实例演示和代码示例,帮助研究者掌握DID方法的核心逻辑、前提条件验证及稳健性检验技巧,提升因果推断研究的准确性。

weixin_29234239的博客 742

2的n次方对照表

2的1次方:2 2的2次方:4 2的3次方:8 2的4次方:16 2的5次方:32 2的6次方:64 2的7次方:128 2的8次方:256 2的9次方:512 2的10次方:1024 2的11次方:2048 2的12次方:4096 2的13次方:8192 2的14次方:16384 2的15次方:32768 2的16次方:65536 2的17次方:131072 2的18次方:262144 2的19...

Rand Tsui 38万+

基于TDOA的chan算法(定位算法)

Chan算法原理 TDOA(TDOA,the time differences of arrival,到达时间差),Chan算法是TDOA定位方法的一个很好用的方法。 Chan算法是非递归双曲线方程组解法,具有解析表达式解,主要特点是:在测量误差服从理想高斯分布时,它的定位精度高、计算量小,并且可以通过增加已确定点的数量来提高算法精度。 该算法的推导前提是基于测量误差为零均值高斯随机变量,对于实际环境中误差较大的测量值,比如在有非视距误差的环境下,该算法的性能会有显著下降。二维情况下,可分为只有三个点参与定

优快云不再更新 2万+

手把手教你完成YOLOv8分类识别界面搭建,使用Qt6设计YOLOv8分类识别系统,前台系统+后台管理系统开发实战,全网最详细教程

本项目基于YOLOv8分类模型,结合PySide6框架开发了一套图形化分类识别系统,支持图片、视频和摄像头实时检测。系统包含以下功能: 分类识别模块:完成图像/视频目标分类,界面展示检测结果。 用户管理模块:支持登录注册、头像修改、密码重置等功能。 AI问答模块:集成DeepSeek大模型接口,实现流式输出对话。 后台管理系统(第二版新增):管理员可管理用户信息及个人中心。 系统采用MySQL数据库存储用户数据,并提供完整的UI界面与交互逻辑。代码已开源,适用于毕业设计或快速部署场景。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 825

判断 2 的幂次方、3 的幂次方、4 的幂次方

1. 2 的幂次方 给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。 如果存在一个整数 x 使得 n == 2^x ,则认为 n 是 2 的幂次方。 2 的 N 次方的二进制必然为 10,100,1000,1000…0 类似的,所以只需要将该整数的二进制表示法与它减 1 的二进制表示法进行与操作,结果为 0 的必然为 2 的 N 次方。 class Solution { public: bool isPowerOfTwo(int n)

wohu1104的专栏 1582

基于多传感器融合的智身四足机器狗楼梯环境SLAM系统设计与实现

本文设计了一种基于多传感器融合的四足机器狗楼梯环境SLAM系统。系统采用Jetson Orin NX为主控制器,集成RealSense D435i深度相机和Livox Mid360激光雷达,在ROS2框架下实现平面定位精度<5cm、楼梯环境下导航不漂移的目标。通过多层次传感器融合策略、运动学约束优化和状态切换机制,解决了楼梯环境下的定位累积误差问题,实现了平面与楼梯环境的自动识别切换及精度复位功能。硬件设计注重传感器布局优化和精确标定,软件架构采用分层设计,确保实时性能。该系统为四足机器人在复杂地形中

huanghm88的专栏 241

判断一个数是不是2的幂次方

比如2: 10 是2的幂次方 再比如8: 1000 也是2的幂次方 但是6 : 就不是2的幂次方 法1: 不断的 /2 如果能除尽就是2的幂次方 def is_mi(x): i = x while x: x = x / 2 if x == 1: print(i, "是2的幂次方") break ...

weixin_43409365的博客 770

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

怎样判断一个数是不是2的幂次方

怎样判断一个数是不是2的幂次方

峰爸的博客 1942

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

【python】判断一个数是否是2的幂次方

一个数是否是2的幂次方,比较常用的是递归和移位运算进行判断。 1. 递归算法的思想很简单,就是不断的模上2去判断。 2. 如果一个数是2的幂,那么它的二进制表示中就只有一位1,例如:10000,1000,100等等。所以如果对数字1进行移位操作,总会在移到某个位的时候和这个数相等。这就是移位判断的思想。 def twopower(n): res = 1 while res ...

yingzoe的博客 7920

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

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

对于如何判断一个数是否为2的幂次方这个问题是很多新手们都好奇的,今天我们就带着这个疑问跟小编去看看判断一个数是否为2的幂次方的方法吧,感兴趣的小伙伴们赶紧收藏起来。将2的幂次方写成二进制形式后,很容易就会发现有一个特点:二进制中只有一个1,并且1后面跟了n个0; 因此问题可以转化为判断1后面是否跟了n个0就可以了。如果将这个数减去1后会发现,仅有的那个1会变为0,而原来的那n个0会变为1;因此将原...

weixin_33810040的博客 4138

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

将2的幂次方写成二进制形式后,很容易就会发现有一个特点:二进制中只有一个1,并且1后面跟了n个0; 因此问题可以转化为判断1后面是否跟了n个0就可以了。         如果将这个数减去1后会发现,仅有的那个1会变为0,而原来的那n个0会变为1;因此将原来的数与去减去1后的数字进行与运算后会发现为零。        最快速的方法:       (number & number - 1) ==

Hackbuteer1的专栏 4万+

如何判断一个数是不是2的幂次方

如何判断一个数是不是2的幂次方

Areszyz的博客 261

如何证明一个数是2的幂次方

一个数是否是2的幂次方,比较常用的是递归和移位运算进行判断。递归算法的思想很简单,就是不断的模上2去判断。 如果一个数是2的幂,那么它的二进制表示中就只有一位1,例如:10000,1000,100等等。所以如果对数字1进行移位操作,总会在移到某个位的时候和这个数相等。这就是移位判断的思想。 因为二进制表示的2的幂次方数中只有一个1,后面跟的是n个0; 因此问题可以转化为判断1后面是否跟了n个0。如...

weixin_42120549的博客 809

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

1、给定一个数a,请用最小的时间

我那柏拉图式的情人 1317

高效判断一个数是否是2的幂次方

一个数是否是2的幂次方,比较常用的是递归和移位运算进行判断。递归算法的思想很简单,就是不断的模上2去判断。 如果一个数是2的幂,那么它的二进制表示中就只有一位1,例如:10000,1000,100等等。所以如果对数字1进行移位操作,总会在移到某个位的时候和这个数相等。这就是移位判断的思想。 下面给出实现的代码,在实现中,还采用了第三种方式,因为二进制表示的2的幂次方数中只有一个1,后面

千山独行 1482

如何判断一个数是否是2的幂次方

1.可以用数学方法求,对这个数求对数,如果结果为整数,则是2的幂次方 2.用计算机的底层数字运算原理求解,将2的幂次方写成二进制形式后,很容易就会发现有一个特点:二进制中只有一个1,并且1后面跟了n个0; 因此问题可以转化为判断1后面是否跟了n个0就可以了。 但是如果我们将这个数减去1后会发现,仅有的那个1会变为0,而原来的那n个0会变为1;因此将原来的数与去减去1后的数字进行与运算后会发

老胡 2155

java中如何实现检查一个数是不是2的幂次方

if((i & (i-1)) == 0) { i 是2的幂次方} public class Test { public static void main(String args[]) { isPowerOfTwo(2); isPowerOfTwo(4); isPowerOfTwo(6); isPowerOfTwo(9);

贾亮的专栏 1618

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

快速判断一个数是否是2的幂次方,若是,并判断出来是多少次方!将2的幂次方写成二进制形式后,很容易就会发现有一个特点:二进制中只有一个1,并且1后面跟了n个0; 因此问题可以转化为判断1后面是否跟了n个0就可以了。如果将这个数减去1后会发现,仅有的那个1会变为0,而原来的那n个0会变为1;因此将原来的数与去减去1后的数字进行与运算后会发现为零。最快速的方法:原因:因为2的N次方换算是二进制为10……...

weixin_30670123的博客 718
上一篇: Perl trim function to strip whitespace from a string
下一篇: /proc/pid下的相应信息说明
tinnycloud
博客等级 码龄21年 9粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值