この記事では、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";#実行結果: 興味のある記事:
CI フレームワークで Redis を操作する方法 ( CodeIgniter) 詳細な説明
#php imagecopymerge() 関数を使用して半透明のウォーターマークを作成する詳細な説明
##
以上がバイナリの 1 の数を数えるアルゴリズムを実装する PHP の例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。