//方法一 :对2求余,统计余数为1的次数
#include <stdio.h>
#include<windows.h>
int countBits( int number){
int count = 0;
while( number){ // 当number = 0 时,跳出循环,
if( number % 2 == 1){ // 判断number二进制最后一位是否为1,
count++;
}
number /= 2; //更行number,相当于右移一位
}
return count;
}
int main(void){
int number = 0;
scanf("%d",&number);
int num = countBits(number);
printf("%d",num);
system("pause");
return 0;
}
// 方法二: 将 1 左移位 ( << ),按位&, 全1为1,否则为0.
int Sum_1(int number){
int i = 0;
int count = 0;
for (; i < 32; i++){
// 不断将 1 向左移一位, 再用number 与 不断左移后的1相与,
// 即: number & (1 << i),
// 若 & 值为0,则number在该二进制该位数为 0;
// 若 & 值为1,则number在该二进制该位数为1; 此时 count++;
if ( 0 != ( number & (1 << i)) ){
count++;
}
}
return count;
}
int main()
{
int number = 127;
int sum = Sum_1(number);
printf("%d", sum);
system("pause");
}
//方法三: 将number&(number-1) 消除1
#include <stdio.h>
#include<windows.h>
int countBits( int number){
int count = 0;
while( number){
number = number & ( number-1);
count++;
}
return count;
}
int main(void){
int number = 0;
scanf("%d",&number);
int num = countBits(number);
printf("%d",num);
system("pause");
return 0;
}