問題形貌
輸入一個整數,輸出該數二進制示意中1的個數。个中負數用補碼示意。
代碼完成
function NumberOf1(n)
{
var count = 0;
while(n !== 0){
count++;
n = n & (n-1);
}
return count;
}
剖析
比方n=13來講,二進制示意為1101,那末:
- n & (n-1) ——> 1101&1100 ——> 1100,count=1
- n & (n-1) ——> 1100&1011 ——> 1000,count=2
- n & (n-1) ——> 1000&0111 ——> 0000,count=3
能夠看出來每次與操縱都邑消滅掉n最右側的1,所以終究能夠得出n的二進制示意中有幾個1.