编辑代码


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位表示的
//