Loading

剑指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;
}
posted @ 2020-03-10 12:03  Jacob是我了  阅读(115)  评论(0编辑  收藏  举报