咋們搞前端的,想必很少有機會接觸二進位吧,那些位運算啥的,不是底層應該考慮的問題嘛?
昨天看到一個題目,它和二進制相關,但用不用位運算都沒關係,借助JS的語言特性,也能輕易地解決。
描述如下:
寫一個函數,接收一個十進制的正整數作參數,用二進位表示它,並傳回那些數位等於1的數目。
來個例子:
1234表示為二進位是1001101001,01001
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)!