【刷算法】二進制中1的個數

問題形貌

輸入一個整數,輸出該數二進制示意中1的個數。个中負數用補碼示意。

代碼完成

function NumberOf1(n)
{
    var count = 0;
    while(n !== 0){
        count++;
        n = n & (n-1);
    }
    
    return count;
}

剖析

比方n=13來講,二進制示意為1101,那末:

  1. n & (n-1) ——> 1101&1100 ——> 1100,count=1
  2. n & (n-1) ——> 1100&1011 ——> 1000,count=2
  3. n & (n-1) ——> 1000&0111 ——> 0000,count=3

能夠看出來每次與操縱都邑消滅掉n最右側的1,所以終究能夠得出n的二進制示意中有幾個1.

    原文作者:亞古
    原文地址: https://segmentfault.com/a/1190000015464803
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞