1.问题描述
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示
2.思路解析
一个数减1之后的结果,再和它本身按位与,即n&(n-1)和n相比,最右边的1变成了0。举例,1100-1=1011
1100&1011=1000.利用这个方法可以统计二进制数中1的个数。
3.c++代码
class Solution { public: int NumberOf1(int n) { int count = 0; while (n!=0){ count++; n = (n-1)&n; } return count; } };
4.总结
很多二进制问题可以用此法解决。比如,计算需要改变m的二进制表示的多少位能得到n,可以将mn异或,对结果求二进制表示的1的个数。