题目描述
输入一个整数,输出该数二进制表示中1的个数。
思路
思路1
将该整数与 1 进行与运算,判断末位是否为 1 ,然后将 1 左移一位,判断整数倒数第二位是否为 1 ,以此类推,不断左移 1 ,直到 1 左移 32 位。
sum =0;
for(int j=0;j<31;j++){
if((z&i)==i){
sum++;
}
i=i<<1;
}
*/
return sum;
思路2
1、在我们的机器上,int数据类型是32位;
2、因此,我们将1从最低位一直移动到最高位,并将每一位与输出的数值a 做 与运算
3、如果a对应位是1,则将计数器 cnt+1,最终 cnt 就是该整数二进制数中1的个数。
int i;
int sum=0;
for( i=0; i<32; i++ ){
if( (z&(1<<i)) == (1<<i) ){
sum++;
}
}
return sum;