简单代码实现:判断一个数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));}