フロントエンドに携わる我々はバイナリに触れる機会が少ないはずですが、これらのビット操作は最下層が考慮すべきものではないでしょうか?
昨日見た質問はバイナリに関するものでしたが、ビット演算が使われているかどうかは関係なく、JSの言語機能を使えば簡単に解決できました。
説明は次のとおりです。
正の 10 進整数をパラメータとして受け取り、それを 2 進数で表し、桁が 1 に等しい数値を返す関数を作成します。
例を見てみましょう:
1234をバイナリで表現すると、10011010010があるため、5は次のようになります。戻ってきました。 この説明を読んだ後、最初に頭に浮かんだのは、先生がよく私に10進数から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には、10進数を2進数に変換するための既製のAPIはありませんか?
number.toString(2)
、これはバイナリ文字列を与えませんか? 結果がすべて出たら、1に等しい数字を1つずつ検索して戻ります。うーん、上記の 2 つの方法は良いですが、目的は同じであり、最も効率的な方法はビット演算です。
最後に、海外の専門家が書いたビット操作ソリューションを見てみましょう!function countBits(n) { for(c=0;n;n>>=1)c+=n&1 return c; }
チク、目がくらむようなリズム。
上記は JavaScript に関する興味深い質問です: 統計バイナリ コンテンツ その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。