十进制中求每个位置上的数字是:n%10n/10用求余加除的方式能够取出每个位置上的数字二进制中也可以用求余2和除2 的方式,但是对于负数不行
-此方法用右移与按位与1的运算举例10:00000000000000000000000000001010----------------1000000000000000000000000000000001----------------100000000000000000000000000000000----------------0,按位与等于000000000000000000000000000000101----------------5, 右移00000000000000000000000000000001----------------100000000000000000000000000000001----------------1,按位与,等于1,个数加一
#include方法二:int NumberOf1(int n) { int count = 0; for (int i = 0; i < 32; i++) { if ((n >> i) & 1 == 1) { count++; } } return count; } int main() { int n = 10; //00000000000000000000000000001010----------10 //00000000000000000000000000000001----------1 //00000000000000000000000000000000----------0//按位与 int num = NumberOf1(n); printf("%dn", num); return 0; }
n=n&(n-1)
int NumberOf1(int n) {
int count = 0;
while (n) {
n = n & (n - 1);
count++;
}
return count;
}



