解法一:利用整型数据除法的特点,通过相除和判断余数的值来分析1的个数.
例如:1011 0110
第一次除以2,商为 1011 011,余为 0.
第二次除以2,商为 1011 01 ,余为 1.
对于二进制操作,对数字除以2,原来的数字就会减少一个0,如果有余数,则表明当前位置有一个1.
代码如下:
int count1_1(int num)
{
int count = 0;
while(num)//num不等于0进入循环
{
if(num%2 != 0)
{
count++;
}
num /= 2;
}
return count;
}
时间复杂度:O(n)
解法二:利用位操作,除以二相当于>>(右移)一位,再通过&操作符,逐位进行判断
&: 1&1 -> 1
0&1 -> 0
1或是0,&1都是其本身,所以利用&1对整数的每一位进行判断.
代码如下:
int count1_2(int num)
{
int count = 0;