快速判断一个数是否是2的幂次方,若是,并判断出来是多少次方!

来源:互联网 发布:爬山算法 贪心算法 编辑:程序博客网 时间:2024/04/29 05:52

        将2的幂次方写成二进制形式后,很容易就会发现有一个特点:二进制中只有一个1,并且1后面跟了n个0; 因此问题可以转化为判断1后面是否跟了n个0就可以了。

        如果将这个数减去1后会发现,仅有的那个1会变为0,而原来的那n个0会变为1;因此将原来的数与去减去1后的数字进行与运算后会发现为零。

       最快速的方法:

      (number & number - 1) == 0

      原因:因为2的N次方换算是二进制为10……0这样的形式(0除外)。与上自己-1的位数,这们得到结果为0。例如。8的二进制为1000;8-1=7,7的二进制为111。两者相与的结果为0。计算如下:
         1000
     & 0111
        -------
        0000

     使用递归来实现的代码如下:
[cpp] view plaincopy
  1. #include "stdio.h"  
  2. #include "stdlib.h"  
  3.   
  4. int log2(int value)   //递归判断一个数是2的多少次方  
  5. {  
  6.     if (value == 1)  
  7.         return 0;  
  8.     else  
  9.         return 1+log2(value>>1);  
  10. }  
  11.   
  12. int main(void)  
  13. {  
  14.     int num;  
  15.     printf("请输入一个整数:");  
  16.     scanf("%d",&num);  
  17.     if(num&(num-1))  //使用与运算判断一个数是否是2的幂次方  
  18.         printf("%d不是2的幂次方!\n",num);  
  19.     else  
  20.         printf("%d是2的%d次方!\n",num,log2(num));  
  21.     system("pause");  
  22.     return 0;  
  23. }  
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 啊儿子深点妈要来了txt 儿子上来妈教你的故事 儿子在快一点妈要飞了视频 单身妈喜欢找儿子 中国家庭毋HH伦s线播放普通话 中国家庭真实毋HH伦s线播放 儿子你快点搞你爸要回来吗 儿子快点你爸回来了嗯 儿子你搞快点你爸要回来啦文字 快点你爸马上就回来了视频 儿子你搞快点你爸要回来啦电影 儿子快拿出来你爸快回来了视频 儿子你要高就快点你爸回来了电影 儿子你要就快点你爸要回来了小说 儿子 快点妈要来了漫画 你快点啊你爸快回来了视频 儿子快点你爸快回来了在哪能看 儿子搞快点你爸要回来了短文 儿子你快停下你爸要醒了视频 儿子用点力妈 儿子深一点用点力阅读 你要搞就快点你爸快回来了视频 试衣间深一点用点力视频 儿子深一点用点力阅读张研 儿子你用点力全文阅读 啊快一点啊用点力啊视频 儿子再用点力妈要飞了视频 中国真实的母教子视频 四川单亲妈教子性知识 52岁全程落脸视频 我尝到了母爱的滋味开头 我尝到了母爱的滋味txt 我尝到了母爱的甜蜜400 真实母教子视频 我尝到了母亲的滋味400 我尝到了母爱的滋味450 单亲家庭母教子 啊儿子深点妈要来了中文字 美国真实的母教子视频 儿子别 停妈还要中文字 尝到了母爱的滋味400