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

weixin_33935777發表於2018-07-03

題目描述

輸入一個整數,輸出該數二進位制表示中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.

相關文章