方法一:
最简单的方法当然是模拟出它的二进制啦!!
while(~(scanf("%lld", &n))) {
nn = n;
int res = 0;
while(nn) {
if(nn & 1) res++;
nn >>= 1;
}
}
方法二:
有一个只针对于unsigned int适用的内置函数,该内置函数返回的就是n作为二进制中‘1’的个数,如果n一旦很大,可能会有错误。
__builtin_popcount(n)
方法三:
运用位运算x & (x-1)
while(~(scanf("%lld", &n))) {
nn = n;
int res = 0;
while(nn) res++, nn = nn & (nn - 1);
printf("%d %lld\n", res, n);
}