一、题目
二、解法
int NumberOf1_Solution1(int n) { int count = 0; unsigned int flag = 1; while (flag) { if (n & flag) count++; flag = flag << 1; } return count; }
我们发现把一个整数减去1,都是把其二进制中最右边的1编程0,如果它的右边还有0,则所有0都变成,而它左边的所有位都保持不变,接下来我们把一个整数和它减去1的结果做位与运算,相当于把它最右边的1编程0,以1100为例,它减去1的结果是1011。我们再把1100和1011做位于运算,得到的结果是1000,我们把1100最右边的1变成了0,结果刚好就是1000。
int NumberOf1_Solution2(int n) { int count = 0; while (n) { ++count; n = (n - 1) & n; } return count; }
文章来源: 面试题15:二进制中1的个数