1 <?php 2 #计算某个二进制数共有几个1 3 #例如十进制11 = 二进制1011,则结果是3个1 4 5 #解题思路:利用 n & (n - 1) 可以将最后一个1变0 6 # xxxx1000 & (xxxx1000 - 1) = xxxx1000 & xxxx0111 = xxxx0000 7 # 1011 & (1011 - 1) = 1011 & 1010 = 1010 8 #直到最后一个1被与为0,得出结果 9 10 function count1($n) { 11 $r = 0; 12 while ($n != 0) { 13 $r++; 14 $n &= ($n - 1); 15 } 16 17 return $r; 18 } 19 20 echo count1(11); 21 ?>