首頁  >  文章  >  web前端  >  JavaScript趣題:統計二進位

JavaScript趣題:統計二進位

黄舟
黄舟原創
2017-02-13 16:23:451386瀏覽

咋們搞前端的,想必很少有機會接觸二進位吧,那些位運算啥的,不是底層應該考慮的問題嘛?

昨天看到一個題目,它和二進制相關,但用不用位運算都沒關係,借助JS的語言特性,也能輕易地解決。

描述如下:

寫一個函數,接收一個十進制的正整數作參數,用二進位表示它,並傳回那些數位等於1的數目。

來個例子:

1234表示為二進位是100110100101001

看了這個描述,我的腦海中首先想到的是,以前老師上課教的,怎麼從十進制轉二進制(書到用時方恨少^_^)。

好在我記性不錯,很快想到了,對這個正整數先對

2取餘,再除以2,結果再對2取餘,再除以2... ……直到結果為0

那麼,在上面的過程裡面用一個變數記錄餘數為

1的次數,最後回傳即可。

於是便有了下面的做法:


var countBits = function(n) {
    var count = 0;
    while(n > 0){
        var res = n % 2;
        if(res == 1){
            count++;
        }
        n = parseInt(n / 2);
    }
    return count;
};

這程式碼和思路都算中規中矩,但沒有充分利用JS的語言特性。

在JS裡面,十進位轉二進位不是有現成的API麽?

number.toString(2),這樣不就得到了二進位的字串了麼?

結果都出來了,那就一個個地查找為1的數目,再回傳。

嗯嗯,上面的兩種方法都不錯,但殊途同歸,最高效的方法還是位運算。

最後,來看一個國外大牛寫的位運算解法吧!


function countBits(n) {
  for(c=0;n;n>>=1)c+=n&1
  return c;
}

嘖嘖,亮瞎雙眼的節奏。

以上就是JavaScript趣題:統計二進位的內容,更多相關內容請關注PHP中文網(www.php.cn)!



陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn