ホームページ  >  記事  >  バックエンド開発  >  バイナリの 1 の数を数えるアルゴリズムを実装する PHP の例

バイナリの 1 の数を数えるアルゴリズムを実装する PHP の例

jacklove
jackloveオリジナル
2018-06-29 17:34:421505ブラウズ

この記事では、PHP で統計バイナリの 1 の数を実現するアルゴリズムを主に紹介し、PHP 文字列の走査、判断、統計、およびその他の関連操作スキルを例の形式で分析します。

# この記事の例では、統計バイナリで 1 を数えるアルゴリズムを PHP で実装する方法について説明します。参考までに皆さんと共有してください。詳細は次のとおりです。

#質問

10 進整数を入力し、1 の数を出力します。数値のバイナリ表現。負の数は 2 の補数で表現されます。

解決策のアイデア

これは一桁の算術に関する質問です。

解決策 1: ビット単位の AND 演算により、各ビットと 1 の AND 演算を行うことで、1 の数を見つけることができます。
解決策 2 (最適な解決策): 賢い方法です。0 ではない 2 進数には、少なくとも 1 つのビットが 1 である必要があります。この数が 1 減ると、最後の 1 ビットは 0 になります。その後のすべてのビットは 0 になります。 0 は 1 に変更されます。たとえば、10100 は 1 を引くと 10011 になります。次に、元の数値 10100 と 10011 の AND 演算を行うと、10000 が得られます。つまり、この操作によって 1 を 0 に変えることができるので、2 進数は何回変換できるでしょうかこれを行う番号は何ですか? 1 の数だけ操作があります。

#実装コード

##
//解法一
function NumberOf1($n)
{
 $count = 0;
  $flag = 1;
  while ($flag != 0) {
   if (($n & $flag) != 0) {
    $count++;
   }
   $flag = $flag << 1;
  }
  return $count;
}

// 解法二
function NumberOf1($n)
{
 $count = 0;
 if($n < 0){ // 处理负数
   $n = $n&0x7FFFFFFF;
   ++$count;
 }
 while($n != 0){
  $count++;
  $n = $n & ($n-1);
 }
 return $count;
}

//测试
$num=45;
echo $num."的二进制是".decbin($num)."<br/>";
echo $num."共有".NumberOf1($num)."个1";

#実行結果:

興味のある記事:

PHP 開発用 WeChat リモート コントロール サーバーの関連説明


CI フレームワークで Redis を操作する方法 ( CodeIgniter) 詳細な説明


#php imagecopymerge() 関数を使用して半透明のウォーターマークを作成する詳細な説明


##

以上がバイナリの 1 の数を数えるアルゴリズムを実装する PHP の例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。