方法一:
最简单的方法当然是模拟出它的二进制啦!!
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
);
}
转载请注明原文地址: https://mac.8miu.com/read-509275.html