day12(二进制中1的个数)

题目描述

输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
 
 
提交链接:点击
 
思路:
  具体的可参考下个。 另外一种方法思路就是用无符号循环右移。因为考虑到负数的补码原因!
 
代码:
class Solution {
public:
     int  NumberOf1(int n) {
         int count=0;
         while(n!=0){
             n=n&(n-1);  //n-1是将从右边往左边数遇到的第一个1后面的0变为1,这个1变为0  n&(n-1)则是每次将最右边的1变为0,然后计数
             count++;    //如n=1010 (n-1)=1001   n&(n-1)=1000
         }
         return count;
     }
};

 

posted on 2018-09-21 19:02  Magic_chao  阅读(151)  评论(0)    收藏  举报

导航