源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

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

  • 时间:2020-04-27 11:59 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:如何判断一个整数的二进制中有多少个1
[u]复制代码[/u] 代码如下:
[b]// 判断一个整数的二进制位中有多少个1 [/b]void totalOne(int x) {  int count = 0;  while(x)  {   x = x & ( x - 1 );   count++;  }  printf("count = %d/n", count); }
[b]循环:[/b] 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)。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部