方法一:(缺点:无法计算负数)
count_ont(int n) { int count = 0; while (n) { if (n % 2 == 1)//如果不是一的话说明最后一位是0 { count++; } n=n/2; } return count; } int main() { int a = 0; scanf_s("%d ", &a); int count = count_ont(a); return 0; }
方法2:
count_ont(unsigned int n) { int i = 0; int count=0; for(i=0;i<31;i++) { if(((n>>i)&1)==1)//向右移动一位 { count++; } } return count; } int main() { int a = 0; scanf_s("%d ", &a); int count = count_ont(a); return 0; }
方法3:(最精简)
#include<stdio.h> int count_ont(int n) { int count=0; while(n) { n=n&(n-1);//这个算法可以让n的二进制位的最右边的一个1变成0 count++; }//有几个一就循环几次 return count; } int main() { int a = 0; scanf_s("%d ", &a); int count = count_ont(a); return 0; }