题目描述:
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
思路:
先说一个规律,某二进制数减去1,会使这个二进制数最右边的1变成0,后面的数取反,举例:1000,减去1变成0111。1100,减去1变成1011。
根据这个规律,使用按位与操作符(&),(某数)&(某数-1)
如下:
1111&1110=1110,
1110&1101=1100,
1100&1011=1000,
1000&0111=0000=0,
由此可见一个二进制数有多少个1,就能进行多少次这样的按位与操作。
代码实现:
function NumberOf1(n)
{
// write code here
var count = 0;
while(n!==0){
n = n&(n-1);
count++;
}
return count;
}