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

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

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

最快速的方法:

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

使用递归来实现的代码如下:

使用非递归来实现的代码如下:

扩展:求一个数n的二进制中1的个数。

非常巧妙地利用了一个性质,n=n&(n-1) 能移除掉n的二进制中最右边的1的性质,循环移除,直到将1全部移除,这种方法将问题的复杂度降低到只和1的个数有关系。代码如下:

扩展问题二:

A和B的二进制中有多少位不相同。这个问题可以分为两步,(1)将A和B异或得到C,即C=A^B,(2)计算C的二进制中有多少个1。

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

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

4的整数次幂的二进制数都为 (4)100、(16)10000、(64)1000000......

另外,4的幂次方4^n也可以写为2^(2*n),即也可以写为2的幂次方,当然就满足2的幂次方的条件了,即num & num-1==0。

思路:首先用条件num & num-1==0来判断是否为2的幂次方,若不满足,则不是。若满足,在用条件num & 0x55555555来判断,若为真,则这个整数是4的幂次方,否则不是。

使用递归来实现的代码如下:

使用非递归来实现的代码如下:

C语言判断是不是2的幂次方,C语言判断一个数是否是2的幂次方或4的幂次方相关推荐

  1. 数值的整数次方-c语言快速幂

    数值的整数次方-c语言快速幂 实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,xn).不得使用库函数,同时不需要考虑大数问题. 示例 1: 输入:x = 2.00000, n = 10 ...

  2. C语言中判断一个三位数是否是水仙花数,判断三位数是否为水仙花数

    用C语言写出判断一个三位数是否为水仙花数的程序 请给正确的答案,不懂的别进 1.一个主程序,输出所有的水仙花数程序,可参考如下: #include int main(int argc, char *a ...

  3. c语言编写程序x的y次方,C语言变为编程y = x-x立方/ 3! + x五次方力量/ 5! -x7th power / 7!...

    这似乎不对,但是无论如何,我只是想补充一个问题,如果可以的话,您能再帮我一次吗? 您不能采用它,但不要说我的代码是错误的!结果留在那里,我自己看了一下. 它不是正整数(x)的序列,被写了n次,怎么可能 ...

  4. 判断数组相同数c语言_单片机常用的14个C语言算法,看过的都成了大神!

    算法(Algorithm):计算机解题的基本思想方法和步骤. C语言入门视频教程_9天精通Linux C语言 - 创客学院​www.makeru.com.cn 算法的描述:是对要解决一个问题或要完成一 ...

  5. 判断一个数2的n次幂的php,如何判断一个数是不是2的n次幂

    题目:给定一个整数num,判断这个整数是否是2的N次方.比如,2,4,8是2的那次方,6,10不是2的N次方. 请看下面的程序: public static bool Check1(int num) ...

  6. C语言函数、指针应用程序设计——回文数判断and检验子串and仓库库存管理程序

    最全C系列题目!从0到管理系统 一.C语言数据类型及输出--体重是否正常.球的体积.计算存银行利息and浮点数长度与精度 二.C语言运算符与表达式--输出逆序数and二进制包含0和1的数量and判断是 ...

  7. C语言学习之输入一个大于三的值判断是否为素数

    C语言学习之输入一个大于三的值判断是否为素数 方法一 #include <stdio.h> int main(){int number,x; //定义变量printf("请输入一 ...

  8. C语言试题七十二之请编写函数判断三角形的类型,并输出其面积和类型。

    1. 题目 编写函数:判断三角形的类型,并输出其面积和类型. 2.思路: 首先判断其两边之和是否大于第三边,若大于则判断可以构成三角形,再进一步判断该三角形是什么三角形,并计算这个三角形的面积:否则不 ...

  9. C语言试题六十九之请编写函数判断一个数是不是素数

    1. 题目 编写函数:判断一个数是不是素数 素数:素数又称质数.所谓素数是指除了 1 和它本身以外,不能被任何整数整除的数,例如17就是素数,因为它不能被 2~16 的任一整数整除. 2 .温馨提示 ...

  10. c语言字符串中取最大字符串,使用C语言提取子字符串及判断对称子字符串最大长度...

    先来看一个使用C语言从字符串中提取子字符串的基本方法总结: #include /*处理中文字符*/ /*遍历字符串,非ASCII字符读取2个字节,ASCII读取一个字节,获取字符串长度*/ int S ...

最新文章

  1. 知乎热议20年科研怪状:为何论文创新性越强越难发表,跟风修修补补反而更容易发?...
  2. 使用PixelLib来实现图像分割
  3. iphone x屏幕尺寸_苹果公布 iPhone 12/12 Pro 屏幕更换价格,网友:碎不起!
  4. java 二分搜索获得大于目标数的第一位_程序员数据结构算法编程,二分查找搜索算法的原理与应用介绍!...
  5. 瞬间读懂什么是互联网思维、大数据、O2O、众筹、红海
  6. 解决PowerDesigner中Name与Code同步的问题
  7. 新手做UI?手里有几种常见的界面套路模板素材,你就成功一大半了!
  8. Docker安装实践Jenkins
  9. 电商3.0:构建互利共赢的生态圈
  10. Hyperledger Fabric教程(14)--动态添加组织的步骤
  11. 使用Bitmap font generator工具生成fnt文件
  12. 数字图像处理冈萨雷斯版学习(二)
  13. 一周技术学习笔记(第58期)-如何突破第四章障碍
  14. 最好用的PDF阅读器,登陆华为应用市场首页
  15. 从Bitly构建分布式系统中吸取的教训
  16. 矩阵小朋友,真是拿你没有办法
  17. 计算机毕业设计SSM电商直播订单管理系统【附源码数据库】
  18. 二进制“<”:“const _Ty”不定义该运算符或到预定义运算符可接收的类型的转换
  19. 网络购书挑战书业传统营销模式
  20. 全球与中国太阳镜片市场现状及未来发展趋势2022-2028

热门文章

  1. 沪深A股上市公司创新投资数据(2007-2018年)
  2. java 跨域重定向_跨域解决以及重定向
  3. [蓝桥杯][历届试题]蚂蚁感冒(模拟全过程)
  4. 从宏观到细节为你讲解前端性能优化
  5. JavaWeb的基础知识点
  6. 【BFS】天棋哥哥大战AlphaGo 校OJ2395
  7. python官网在哪里下载64bit_WinPython下载64bit
  8. RecycleView配合Adapter调用notifyDataSetChanged闪屏?
  9. web前端控制器拦截路径的url-pattern写 / 与 /* 的区别
  10. c语言编程3个数的立方和,用C语言编写:输出所有水仙花数.所谓水仙花数是指一个3位数.其各位数字立方和等于该数本身....