其实有一个函数还是挺不为人知的,叫__builtin_popcount(n)

可以统计一个数的二进制的1的个数

但是!这个函数后面的n是unsigend int型,对于本题来说会爆掉的

所以我们就可以换成它的long long 版本:__builtin_popcountll(n)

最后直接输出就好啦

void _()
{
    cin >> n;
    cout << __builtin_popcountll(n);
}

加餐:

__built_popcount除了能统计1的个数外,还可以用变种去统计其他的量,比如:

__builtin_clz(x); 为前导零的数量(从最高位开始到遇到的第一个1的过程中0的数量)

__builtin_clzll(x); 处理long long的数据

__builtin_ctz(x); 为后导零的数量(从最低位开始到遇到的第一个1的过程中0的数量)

__builtin_ctzll(x); 处理long long的数据