您的位置:首页 > 其它

移位运算实际应用——判断整数N是否为2的阶次方

2010-03-17 14:45 267 查看
首先看一下2的n次方数表示成二进制的样子



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

#include "studio.h"

int main(){

int i=16;
int n;

printf("输入一个int类型整数:");
scanf("%d",&n);
if(n>1<<(i-1)){
printf("\n输入超出范围!!\n");
return0;
}
else{
for(i=0;i<16;i++){
if(n==1<<i){
printf("\n整数%d是2的%d次方!\n",n,i);
return1;
}
}
printf("整数%d不是2的阶次方。",n);
return0;
}
}

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

不知道各位有没有更好的方法实现,能够使程序运行效率更高。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐