二进制中1的个数

陌路散爱 提交于 2020-02-22 18:06:33

题目描述

  输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。

解题思路

  对于n来说,n&(n-1)能够将n的二进制表示中最右面的1变为0,比如n的二进制表示为xxx100,n-1的二进制表示为xxx011,显然进行一个&操作之后,最右面的1已经变为0,那么有多少次操作n可以变为0,n中就含有多少个1。

实现代码

class Solution {
public:
     int  NumberOf1(int n) {
         int cnt=0;
         while(n){
             cnt++;
             n&=n-1;
         }
         return cnt;
     }
};
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!