欢迎来到工商注册核名查询系统!

C语言

当前位置:主页 > 软件编程 > C语言 >

如何判断一个整数的二进制中有多少个1

来源:本站原创|时间:2022-11-25|栏目:C语言|

复制代码 代码如下:

// 判断一个整数的二进制位中有多少个1
void totalOne(int x)
{
 int count = 0;
 while(x)
 {
  x = x & ( x - 1 );
  count++;
 }
 printf("count = %d/n", count);
}

循环: x = x & ( x - 1 ); count++; 直到x为0为止。该方法的时间复杂度是O(m)
在此,不妨把x的二进制位表示为
          x=an-1an-2...a0。
按从低位到高位的顺序,不失一般性,假设x的第i位为第一个为1的二进制位,即:ai=1。此时有:
          x       =an-1an-2...ai+1100...0              <1>
         (x-1)  =an-1an-2...ai+1011...1              <2>
很明显,从式1和式2可以得出,在第一次 x & (x-1) 后:
          x=an-1an-2...ai+1000...0
之后重复同样操作,直到x的二进制位中没有1为止
从上面可以看出,每执行过一次 x & (x-1) 后,都会将x的二进制位中为1的最低位的值变为0,并记数加1。
目前而言,一个整数最大64bit,所有三种方法执行起来都可以认为是0(1)。

更多C语言

您可能感兴趣的文章

阅读排行

本栏相关

随机阅读

网页制作CMS教程网络编程软件编程脚本语言数据库服务器

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:835971066 | 邮箱:835971066#qq.com(#换成@)

Copyright © 2002-2020 工商注册核名查询系统 版权所有