计算一个数的二进制表示中0和1个数的方法

来源:互联网 发布:尚德自考靠谱 知乎 编辑:程序博客网 时间:2024/06/07 02:20

常见的一个方法是

x&(x-1)   的作用是对一个数中二进制1的个数进行统计

x|(x+1)    的作用是对一个数中二进制0的个数进行统计

 

今天做牛客网上的题,又学习到了一个新的算法,叫做平行算法,用来计算二进制的1的个数

intBitCount(unsigned int n){    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写成二进制形式,然后相邻位相加,重复这个过程,直到只剩下一位。

 

以217(11011001)为例,有图有真相,下面的图足以说明一切了。217的二进制表示中有5个1。




阅读全文
0 0
原创粉丝点击