算法1
思路:这个题有两个解法,将右移运算最常用的两种用法全部 使用了
C++ 代码
class Solution {
public:
int NumberOf1(int n) {
int cnt=0;
for(int i=0;i<32;i++){//int有32位,每次右移一位,判断是不是1,cnt++
if(n>>i&1)
cnt++;
}
return cnt;
}
};
算法2
C++ 代码
class Solution {
public:
int NumberOf1(int n) {
int cnt=0;
while(n) n-=n&-n,cnt++;//n&-n表示得到最后一位1,每次遇见1,cnt++
return cnt;
}
};