惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

J
Java Code Geeks
博客园 - 司徒正美
博客园 - 【当耐特】
爱范儿
爱范儿
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
IT之家
IT之家
人人都是产品经理
人人都是产品经理
雷峰网
雷峰网
酷 壳 – CoolShell
酷 壳 – CoolShell
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
大猫的无限游戏
大猫的无限游戏
月光博客
月光博客
宝玉的分享
宝玉的分享
V
V2EX
S
SegmentFault 最新的问题
V
Visual Studio Blog
阮一峰的网络日志
阮一峰的网络日志
Martin Fowler
Martin Fowler
Jina AI
Jina AI
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园_首页
L
LangChain Blog
D
Docker
腾讯CDC

博客园 - patrickwai

java enum用法 Java中哈希表(Hashtable)是如何实现的 注意for循环中变量的作用域 用SAX Parser(Simple API for XML)分析RSS android权限 【转】分治法求最大值最小值 JPA实体关系映射 JPA基本实体映射学习 Servlet实现基本文件上传 Servlet学习(一) 用javascript与正则表达式验证表单 - patrickwai - 博客园 java题目分析 java中的synchronized Spring学习——依赖注入 Spring学习——Hello World xml,javascript,XMLHttpRequest 学习笔记 向依赖关系宣战——依赖倒置、控制反转和依赖注入辨析[转载] MySql存储过程学习 自己用C语言写的扫雷算法
移位运算实际应用——判断整数N是否为2的阶次方
patrickwai · 2010-03-17 · via 博客园 - patrickwai

首先看一下2的n次方数表示成二进制的样子

上图看出n+1次方相对于n次方整个数向左移了1位 据此C语言实现如下:

1 #include "studio.h"
2
3  int main(){
4
5 int i=16;
6 int n;
7
8 printf("输入一个int类型整数:");
9 scanf("%d",&n);
10 if(n>1<<(i-1)){
11 printf("\n输入超出范围!!\n");
12 return0;
13 }
14 else{
15 for(i=0;i<16;i++){
16 if(n==1<<i){
17 printf("\n整数%d是2的%d次方!\n",n,i);
18 return1;
19 }
20 }
21 printf("整数%d不是2的阶次方。",n);
22 return0;
23 }
24 }

这个程序的问题如果一个数在移位的时候,恰好把超出int范围的数字丢弃剩下....1000.....,这个数也被判为是2的n次方。

不知道各位有没有更好的方法实现,能够使程序运行效率更高。