剑指offer[11]——二进制中1的个数
题目描述
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
二进制之间的与运算在JS中可以使用&
符号,在这里我们思考一个问题,10的二进制为1010
,当我把5减去1时,其二进制从右往左数第一个1会变为0,这个1右边所有的0会取反变为1,例如:
\[1010-1=1001
\]
如果我们把5的二进制与其减去1的二进制进行与操作的话,5的二进制从左往右数第一个1及其右边的所有数字都会变成0,如下:
\[1010\&1001=1000
\]
从运算结果来看,进行与操作之后比之前少了一个1,其实我们可以推论得知,其二进制有多少个1就可以进行多少次这样的操作,说到这里大家应该可以明白了,算法如下:
function NumberOf1(n)
{
let count = 0;
while(n != 0){
count++;
n = n&(n-1)
}
return count;
}
我不管,JS天下第一