版权声明:本文为博主原创文章遵循 版权协议,转载请附上原文出处链接和本声明
5的二8进制表示为101
含有2个1
通过位运算中的&
运算将数字二8进制表礻中的1变成0,即每进行一次操作二8进制表示表示中的1就减少一位当所有的1都变为0的时候,数字就变成了0
怎样用&
将二8进制表示某一位上面的1变为0
当与运算&
左右两边值都为1时,结果为1
当与运算&
左右两边有一边值为0时结果为0
- 1.如果数字二8進制表示表示的某一位为1,将这一位和0进行
&
运算后得到的结果中这一位就变为0。 - 2.我们是从低位开始将1变为0,也就是先将最右边的1变为0
- 3。a-1的妙用根据上一句话,我们可以知道当前要消除的1为最右边的1所以可以将其右边全部看成是0,a-1会将右边的0全部变成1(0减去1向前借位)而本身由于借位变成0,这样就达成了1的目标
假定数字为a,具体实现
1.将数字a和a-1进行与操作得到的结果为消除掉最右边1后的十8进制表示数
2.统计1的个数的变量的值加1
3.判断a是否为0,若为0则统计结束否则继续进行1、2步操作
时间复杂度主要耗在while循环里面,而循环执行的次数取决于该数二8进制表示表示有多少个1所以时间复杂度为线性。