题目描述


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


知识点:

  1. 把整数右移动一位和把整数除以2在数学上是相等的,但是在运算效率上,移位运算效率远高于除法运算。
  2. 把一个整数减去1之和再和原来的整数做位与运算,得到的结果相当于把整数的二进制表示中最右边的1变为0.

题解1:采用知识点1


题解2:采用知识点2:位运算 n&(n-1)

class Solution {
public:
     int  NumberOf1(int n) {
         int count = 0;
         while(n){
             n = n&(n-1);
             count ++;
         }
         return count;
     }
};