[PHP]演算法-二進位制中1的個數的PHP實現
阿新 • • 發佈:2018-10-31
二進位制中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);