首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

简单代码实现:判断一个数x是不是2的n次方,是的话输出n解决办法

2012-05-27 
简单代码实现:判断一个数x是不是2的n次方,是的话输出n这是我的:int main(){int i1,j0,k8while(!(k&i

简单代码实现:判断一个数x是不是2的n次方,是的话输出n
这是我的:
int main(){
int i=1,j=0,k=8;
while(!(k&i<<j++));
k==i<<--j?printf("yes,%d",j):printf("not\n");
return 0;
}
个人感觉效率还是很高的,有效率更高的请回帖。

[解决办法]
判断x是不是2的n次方,3楼正解。若需要求出n。在x86CPU,这些方法都不是最快的。intel从386开始,增加指令bsr,AMD同期稍后的CPU同样支持这条指令,在最新的45ns的CPU,这条指令的延迟只有2个周期。下面给出在VC++(VC6,VC2008,VC2010)中测试代码。

C/C++ code
#include <stdio.h>#include <stdlib.h>typedef unsigned long DWORD;int log2(DWORD n){    _asm { bsr eax,n }}int main(){    DWORD i;        for (i=1;i!=0;i=(i<<1))        printf("i=%u,%u=2^%d\n",i,i,log2(i));} 

热点排行