相关题目:
二进制中1的个数https://www.acwing.com/problem/content/description/25/
补充:
1 k&1的目的是为了取出k(以二进制的形式)的最后一位。
2 取出k=(1101)千分位的数,k=k>>3&1。
3 lowbit(int x){return x&-x} 该方法的目的是为了取出最后一个1后面的数字(包括1)
例如:10100 -> 100。
4 二进制的数也可以做加减运算。
5 int所占字节数是4所占位数是32。
相关代码1:
class Solution {
public:
int NumberOf1(int n) {
int res=0;
if(n>=0){
while(n){
n=n-(n&-n);
res++;
}
}
else{
while(abs(n)){
n=n-(n&-n);
res++;
}
}
return res;
}
};
相关代码2:
class Solution {
public:
int NumberOf1(int n) {
int res = 0, t;
for(int i = 0; i < 32; i++) { //int类型占4B即32bit,故循环32次
res += n >> i & 1;
}
return res;
}
};