<kbd id='woaibaidu'></kbd><address id='woaibaidu'><style id='woaibaidu'></style></address><button id='woaibaidu'></button>

          当前位置:主页 > 网络编程 > PHP编程 >
            php实现统计二进制中1的个数算法示例
            2018-01-29 22:02 发布 次浏览

          本文实例讲述了php完成统计2进制中1的个数算法。分享给各人供各人参考,详细以下:

          成绩

          输出1个10进制整数,输入该数2进制表现中1的个数。其中正数用补码表现。

          处理思绪

          这是个位运算的标题。
          解法1:可以经过按位与操作,经过将每位和1与操作来求出1的个数。
          解法2(最优解):1个奇妙的办法,1个不为0的2进制数,一定至多有1位是1,当这个数减1的时分,它的最初1位1会变成0,后边的一切0会变成1。比方10100,减1以后会变成10011,然后用原数字10100和10011停止与操作以后,会失掉10000,也就是经过这个操作,可以将1个1变成0,所以1个2进制数字能停止几多次这样的操作,就有几多个1.

          完成代码

          //解法1
          function NumberOf1($n)
          {
           $count = 0;
            $flag = 1;
            while ($flag != 0) {
             if (($n & $flag) != 0) {
              $count++;
             }
             $flag = $flag << 1;
            }
            return $count;
          }
          
          // 解法2
          function NumberOf1($n)
          {
           $count = 0;
           if($n < 0){ // 处置正数
             $n = $n&0x7FFFFFFF;
             ++$count;
           }
           while($n != 0){
            $count++;
            $n = $n & ($n⑴);
           }
           return $count;
          }
          
          //测试
          $num=45;
          echo $num."的2进制是".decbin($num)."<br/>";
          echo $num."共有".NumberOf1($num)."个1";
          
          

          运转后果:

          更多关于PHP相干内容感兴味的读者可检查本站专题:《PHP数据构造与算法教程》、《php顺序设盘算法总结》、《php字符串(string)用法总结》、《PHP数组(Array)操作技能大全》、《PHP经常使用遍历算法与技能总结》及《PHP数学运算技能总结》

          希望本文所述对各人PHP顺序设计有所协助。