15剑指OFFER之二进制中1的个数

参考资料:

剑指OFFER课本第3种解法

思路:
关键词:

n=n(n-1);

自己的答案:
class Solution {
public:
     int  NumberOf1(int n) {
         int count = 0;
         while(n)
         {
             n=n&(n-1);
             count++;
         }
         return count;
     }
};
//统计二进制中1的个个数用n=n(n-1)
//8的二进制是1000
//7的二进制是0111
//与后是0
//
标准答案:联发科考题
class Solution {
public:
     int  NumberOf1(int n) {
         
         int count = 0;
         //将一个数减1之后,与原来的数按位与,就能把该数最右边的1变为0,一个数有多少个1,就能操作多少次
         while(n)
         {
             n = (n-1)&n;
             count++;
         }    
         return count;
     }
};
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容