php怎么實現(xiàn)統(tǒng)計二進(jìn)制中1的個數(shù)算法?本文為大家介紹了php實現(xiàn)統(tǒng)計二進(jìn)制中1的個數(shù)算法的實例代碼,快來看看吧。
問題:
輸入一個十進(jìn)制整數(shù),輸出該數(shù)二進(jìn)制表示中1的個數(shù)。其中負(fù)數(shù)用補(bǔ)碼表示。
解決思路:
這是個位運算的題目。
解法一:可以通過按位與操作,通過將每一位和1與操作來求出1的個數(shù)。
解法二(最優(yōu)解):一個巧妙的方法,一個不為0的二進(jìn)制數(shù),肯定至少有一位是1,當(dāng)這個數(shù)減一的時候,它的最后一位1會變?yōu)?,后邊的所有0會變?yōu)?。比如10100,減一之后會變?yōu)?0011,然后用原數(shù)字10100和10011進(jìn)行與操作之后,會得到10000,也就是通過這個操作,可以將一個1變?yōu)?,所以一個二進(jìn)制數(shù)字能進(jìn)行多少次這樣的操作,就有多少個1.
實現(xiàn)代碼:
- //解法一
- 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){ // 處理負(fù)數(shù)
- $n = $n&0x7FFFFFFF;
- ++$count;
- }
- while($n != 0){
- $count++;
- $n = $n & ($n-1);
- }
- return $count;
- }
- //測試
- $num=45;
- echo $num."的二進(jìn)制是".decbin($num)."<br/>";
- echo $num."共有".NumberOf1($num)."個1";
運行結(jié)果:
45的二進(jìn)制是101101
45共有4個1
新聞熱點
疑難解答