zoukankan      html  css  js  c++  java
  • 答复:“判断一个整数的二进制位中有多少个1”的提问

    朋友发来了一个链接,看来原来是很久之前写的一篇关于“判断一个整数的二进制位中有多少个1”的Blog,yjdlut问了关于第三种判断方法的原理。这里先把原文中的第三种方法列出来:
         循环: 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)。

  • 相关阅读:
    函数
    字符编码和文件处理
    内置方法
    day6课后复习
    第四十篇、美颜篇
    第三十八篇、给UITabBar按钮的动画效果
    第三十九篇、NavBar动态隐藏、设置透明、毛玻璃效果
    第九篇、Swift的基本使用
    第三十七篇、毛玻璃效果
    第三十六篇、webService
  • 原文地址:https://www.cnblogs.com/dust/p/1192639.html
Copyright © 2011-2022 走看看