二进制中1的个数(中等,数学)

题目描述
输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。
示例1
输入
10
返回值
2
补码:源码取反+1

class Solution {
    
    
public:
     int  NumberOf1(int n) {
    
    
         int sum=0,tip=32;
         if(n>=0)
         {
    
    
             while(tip--)
             {
    
    
              if(n&1) sum++;
              n>>=1;
             }
         }
         else
         {
    
    
             int tmp=1,t;n*=-1;
             while(tip--)
             {
    
    
                 t=(n&1)^1;//个位取反
                 if(tmp^t) sum++;
                 tmp&=t;//进位
                 n>>=1;
             }
         }
         return sum;
     }
};

猜你喜欢

转载自blog.csdn.net/weixin_43540515/article/details/114337762
今日推荐