面试题15:二进制中1的个数

匿名 (未验证) 提交于 2019-12-03 00:34:01

一、题目

二、解法


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; }
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!