class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param n int整型 
     * @return int整型
     */
    int NumberOf1(int n) {
        // write code here
        // 位运算
        // int count = 0;
        // auto un = static_cast<unsigned int>(n);
        // while (un != 0) {
        //     count += un & 1; // 检查最低位是不是 1
        //     un >>= 1; // 对无符号整数进行右移,保证是逻辑右移
        // }
        // return count;

        // Brian Kernighan 算法
        // int count = 0;
        // while (n != 0) {
        //     n &= (n - 1); // 清楚最低位的 1
        //     count++;
        // }
        // return count;

        // 内置函数法
        return __builtin_popcount(n);
    }
};