求二进制数中的1的个数

原创 2013年12月01日 21:21:59

今天在做深入理解计算机系统的LAB1,其中有道题求二进制数中的1的个数

看到这种算法
int bitCount(int x)
{
    n = (n &0x55555555) + ((n >>1) &0x55555555) ;
    n = (n &0x33333333) + ((n >>2) &0x33333333) ;
    n = (n &0x0f0f0f0f) + ((n >>4) &0x0f0f0f0f) ;
    n = (n &0x00ff00ff) + ((n >>8) &0x00ff00ff) ;
    n = (n &0x0000ffff) + ((n >>16) &0x0000ffff) ;

    return n ;
}
简单分析一下:

例如一个 表达式 n= (1101)( 1001)( 1111)( 1000)( 0001) ...

与上0x55555555,就是取了每个括号的的第二位和第四位,然后((n >>1) &0x55555555)其实就是取了每个括号里的第一位和第三位,相加就实现了将每个括号里的第一位加上第二位,第三位加上第四位,以此类推得到(10)(01)(01)(01)(10)(10)(01)(00)(00)(01)...每两位就代表

1101)(1001)(1111)( 1000)( 0001) 中各个括号中的两位里面的1的个数。接下来与上(n &0x33333333) + ((n >>2) &0x33333333),

大致过程如下:

   (10)(01)(01)(01)(10)(10)(01)(00)(00)(01).

       00        11       00        11          00       11        00        11          即&0x33333333

                  (10)(01)(01)(01)(10)(10)(01)(00)(00).

        00        11        00         11        00        11        00        11          即&0x33333333

  这样相加又会将高的二位与低的二位相加得到表达式n中四个位里面1的个数。0x55555555和0x33333333这些主要是为了取出一块数据。

相关文章推荐

求二进制数中1的个数.pdf

  • 2011年12月03日 12:13
  • 257KB
  • 下载

“求二进制数中1的个数”

【一】“求二进制数中1的个数”的几种方法 转自[http://blog.csdn.net/justpub/article/details/2292823]   求二进制中1的个数。对于一个字...
  • yockie
  • yockie
  • 2012年07月25日 17:31
  • 1935

求二进制数中1的个数(编程之美)

求二进制数中1的个数继京东618店庆时买的《编程之美》这本书,翻了翻,发现里面的题还是挺有意思的,看起来我们觉得很简单的题目,解法却有很多很多种,真是一个比一个巧妙,于是,决定记录一下。书中的题目如下...

关于求二进制数中1的个数的算法

原文出处:http://www.cnblogs.com/graphics/archive/2010/06/21/1752421.html   算法-求二进制数中1的个数 问题描述 ...

位运算应用一:求一个数的二进制表示中1的个数

上一篇文章中,我们提到了位运算这个概念,在这里我们试着使用位运算来统计一个数的二进制表示中1的个数...

编程之美求二进制数中1的个数扩展题

转自:http://s.sousb.com/?p=253 编程之美2.1节中的扩展题第1题:如果变量是32位的Dword,则如何统计该二进制数中1的个数。 对于该题,原本的想法还是想采用书...

求二进制数中1的个数 | hamming_weight

题目:对于一个字节的无符号整型变量,求其二进制表示中1的个数。 解法1:位操作法 (这里又细分成2中方法,详见代码) ...

求二进制数中1的个数(剑指offer10 编程之美2.1)

1.借助栈,先求这个数的二进制表示,然后计算1的个数

求二进制数中1的个数——《编程之美》

求二进制中1的个数。对于一个字节(8bit)的变量,求其二进制表示中"1"的个数,要求算法的执行效率尽可能的高。先来看看样章上给出的几个算法:解法一 ,每次除二,看是否为奇数,是的话就累计加一,最后...

《编程之美》读书笔记——“求二进制数中1的个数”(转自http://blog.csdn.net/justpub/article/details/2292823)

《编程之美——微软技术面试心得》读书笔记 “求二进制数中1的个数” by ZelluX    由电子工业出版社博文视点和w3china.org社区联合举办了“看样章, 写书评, 赢取《编程...
  • xjbzju
  • xjbzju
  • 2011年10月13日 20:34
  • 944
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:求二进制数中的1的个数
举报原因:
原因补充:

(最多只允许输入30个字)