力扣-比特位计数(统计一个数二进制下1的个数)
下面是题面
1.用c++的内置函数__builtin_popcount()
语法:__builtin_popcount(int x),函数会返回一个二进制下x所含的1的个数
2.直接数位枚举
这是最慢也是暴力做法,写法也很简单
用一个while循环把x进行模2,如果是1就计数加1,然后x /=2 就好,这里就不展示代码了
3.用x &= (x - 1)
这样用了数在二进制下的规律,可以实现直接从最低位的1开始进行处理,然后更新换上一个1,代码如下:
while (x > 0) {
x &= (x - 1);
ones++;
}
这里,ones就是要求的x在二进制下1的个数