快速判断一个数是否是4的幂次方,若是,并判断出来是多少次方
时间:2019-02-11
本文章向大家介绍快速判断一个数是否是4的幂次方,若是,并判断出来是多少次方,主要包括快速判断一个数是否是4的幂次方,若是,并判断出来是多少次方使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
将4的幂次方写成二进制形式后,很容易就会发现有一个特点:二进制中只有一个1(1在奇数位置),并且1后面跟了偶数个0; 因此问题可以转化为判断1后面是否跟了偶数个0就可以了。
4的整数次幂的二进制数都为 (4)100、(16)10000、(64)1000000......
另外,4的幂次方4^n也可以写为2^(2*n),即也可以写为2的幂次方,当然就满足2的幂次方的条件了,即num & num-1==0。
思路:首先用条件num & num-1==0来判断是否为2的幂次方,若不满足,则不是。若满足,在用条件num & 0x55555555来判断,若为真,则这个整数是4的幂次方,否则不是。
使用递归来实现的代码如下:
#include "stdio.h"#include "stdlib.h"bool fn(unsigned int x) //判断x是否是4的幂次方{ if ( x & (x - 1) ) //判断x是否为2的幂次方 return false; return x & 0x55555555; //判断1是否在奇数位置上}int log4(int value) //递归判断一个数是4的多少次方{ if (value == 1) return 0; else { value>>=1; //往右移位 return 1+log4(value>>1); //往右移位 }}int main(void){ int num; printf("请输入一个整数:"); scanf("%d",&num); if(fn(num)) //使用与运算判断一个数是否是2的幂次方 printf("%d是4的%d次方!\n",num,log4(num)); else printf("%d不是4的幂次方!\n",num); system("pause"); return 0;}
使用非递归来实现的代码如下:
#include "stdio.h"#include "stdlib.h"bool fn(unsigned int x) //判断x是否是4的幂次方{ if ( x & (x - 1) ) //判断x是否为2的幂次方 return false; return x & 0x55555555; //判断1是否在奇数位置上}int log4(int value) //非递归判断一个数是4的多少次方 { int x=0; while(value>1) { value>>=1; //往右移位 value>>=1; x++; } return x;} int main(void){ int num; printf("请输入一个整数:"); scanf("%d",&num); if(fn(num)) //使用与运算判断一个数是否是2的幂次方 printf("%d是4的%d次方!\n",num,log4(num)); else printf("%d不是4的幂次方!\n",num); system("pause"); return 0;}
- 容灾半自动化的实现思路(二) (r7笔记第93天)
- Go 谚语
- DBA和开发同事的一些代沟(五) (r7笔记第92天)
- 55. 上传文件(Web版) | 厚土Go学习笔记
- ASM无法启动的问题分析(一)(r7笔记第87天)
- 54. 心跳的实现 | 厚土Go学习笔记
- 53. Socket服务三次握手的示例 | 厚土Go学习笔记
- 使用Beego+Swagger构建更好的API服务
- ASM无法启动的问题分析(二)(r7笔记第88天)
- 43. 等价二叉树 | 厚土Go学习笔记
- 51. Socket服务端和客户端使用TCP协议通讯 | 厚土Go学习笔记
- 50. RESTful API的简单实现 | 厚土Go学习笔记
- go实现西瓜视频花椒直播等平台智能答题
- 主备切换的准备工作(二) (r7笔记第85天)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Unity打iOS包之xcodeapi的使用
- C++中sort函数使用方法
- 史上最贴心React渲染器开发辅导
- 010.Nginx正反代理
- ClickHouse源码笔记2:聚合流程的实现
- 5G边缘计算赋能安防互联网直播行业,青犀视频强力打造云、边、端一体化协同音视频解决方案
- 视频云平台流媒体服务EasyNVR能获取直播视频的RTSP流地址吗?
- 如何编写不存在即插入的 SQL
- SQL 打印一个月的日历
- Kubernetes节点的驱逐与预留
- 使用reveal.js制作精美的网页版PPT
- Ceph快照爱你不容易系列 03:快照数据一致性浅析
- 没想到竟是因为它!让我的服务器变成了别人的挖矿工具
- 从零到一,Serverless 平台在滴滴内部落地
- React 使用 Proxy 代理(create-react-app)