题目描述
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
思路一
每次和自己少一位的数相与 每次相与 都可以去掉一个1
思路二
每次和1相与 得到最后一位数 要么是0要么是1 直接加入结果
然后右移一位 继续得到下一个最后一位数
注意是无符号右移
public class Offer11 {
public int NumberOf1(int n) {
int res = 0;
while(n != 0) {
n &= (n-1);
res++;
}
return res;
//思路二
// int res = 0;
// while(n != 0) {
// res += n & 1;
// n >>>=1;
// }
// return res;
}
}