输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
+0 | 0000 | 表示方式不变 | 表示方式不变(补码) |
-0 | 1000 | 1111 | [1]0000 |
int count = 0;
int flag = 1;
while (flag != 0) {
if ((n & flag) != 0) {
count++;
}
flag = flag << 1;
}
return count;
另一种方法就是n=n&(n-1) 每与一次少一个1 记录操作的次数 最右侧的一个1变成0 减少一个1
int count=0;
while(n!=0){
count++;
n=n&n(n-1);
}
return count;
如果是负数那么左移会用1来补齐,这就bug了
public class Solution {
public int NumberOf1(int n) {
int count=0;
while(n!=0){
if((n&1)==1)
count++;
n=n>>1;
}
return count;
}
}