function NumberOf1(n) {
if(n === 0) // 0的补码为 0000 0000 ... 0000
return 0;
let tmp = n;
let sum = 0;
let bit_cnt = 0; // 记录移过的位
while( true ) {
sum += (tmp & 1);
bit_cnt += 1;
console.log('tmp =',tmp,' ; sum =', sum);
if((Math.abs(tmp) >> 1) === 0)
break;
tmp = tmp >> 1;
}
console.log('bit_cnt:', bit_cnt);
if(n < 0 && bit_cnt <= 32) {
// 补齐1
console.log('add bits:', 32-bit_cnt);
sum += (32-bit_cnt);
}
return sum;
}
console.log(NumberOf1(-1));
// 输入:-1;输出:32 => 可见一个int是以32位表示的
//