如果输入为负数,用补码表示此数。(即不需要多余的处理)
常见写法:
int NumberOf1 (int n) {
int flag = 1;
int ans = 0;
while (flag) { // 左移最后变为0
if(flag & n)
ans ++;
flag = flag << 1;
}
return ans;
}
更快的写法:
int NumberOf1_faster(int n) {
int ans = 0;
while (n) {
++ ans;
n = n & (n - 1); // 每次操作能去掉二进制中的一个1
}
return ans;
}