1. 程式人生 > >[PHP]演算法-二進位制中1的個數的PHP實現

[PHP]演算法-二進位制中1的個數的PHP實現

二進位制中1的個數:

輸入一個整數,輸出該數二進位制表示中1的個數。其中負數用補碼錶示。

思路:
1.右移位運算>> 和 與運算&
2.先移位個然後再與1 &運算為1的就是1
3.這裡如果是負數就會出現死迴圈,負數右移後高位會一直補1
4.因此要實現一下無符號位移

無符號右移的實現思路
1.這個負數右移n位後的結果,然後把符號位後n位的1變為0
2.2147483647 這個數是0...31個1  ,最大的正整數右移n-1位的結果 進行&運算


un_right(a,n)
     $c = 2147483647>>($n-1);
     
return $c&($a>>$n); NumberOf1(n) count=0 while n!=0 if n&1==1 count++ n=un_right(n,1) return count

 

 

<?php
//無符號位移
function un_right($a,$n){
        $c = 2147483647>>($n-1);
        return $c&($a>>$n);
}
//檢測整數二進位制中1的個數
function NumberOf1($n) { $count=0; while($n!=0){ if($n&1==1){ $count++; } $n=un_right($n,1); } return $count; } $r=NumberOf1(10); var_dump($r);