JavaScript の楽しい質問: 統計バイナリ

黄舟
リリース: 2017-02-13 16:23:45
オリジナル
1373 人が閲覧しました

フロントエンドに携わる我々はバイナリに触れる機会が少ないはずですが、これらのビット操作は最下層が考慮すべきものではないでしょうか?

昨日見た質問はバイナリに関するものでしたが、ビット演算が使われているかどうかは関係なく、JSの言語機能を使えば簡単に解決できました。

説明は次のとおりです。

正の 10 進整数をパラメータとして受け取り、それを 2 進数で表し、桁が 1 に等しい数値を返す関数を作成します。

例を見てみましょう:

1234をバイナリで表現すると、10011010010があるため、5は次のようになります。戻ってきました。 この説明を読んだ後、最初に頭に浮かんだのは、先生がよく私に10進数から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には、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) に注目してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!