题目描述
输入一个整数 n ,输出该数32位二进制表示中1的个数。其中负数用补码表示。
知识点:
- 把整数右移动一位和把整数除以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;
}
};