php实现统计二进制中1的个数算法示例


Posted in PHP onJanuary 23, 2018

本文实例讲述了php实现统计二进制中1的个数算法。分享给大家供大家参考,具体如下:

问题

输入一个十进制整数,输出该数二进制表示中1的个数。其中负数用补码表示。

解决思路

这是个位运算的题目。
解法一:可以通过按位与操作,通过将每一位和1与操作来求出1的个数。
解法二(最优解):一个巧妙的方法,一个不为0的二进制数,肯定至少有一位是1,当这个数减一的时候,它的最后一位1会变为0,后边的所有0会变为1。比如10100,减一之后会变为10011,然后用原数字10100和10011进行与操作之后,会得到10000,也就是通过这个操作,可以将一个1变为0,所以一个二进制数字能进行多少次这样的操作,就有多少个1.

实现代码

//解法一
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){ // 处理负数
   $n = $n&0x7FFFFFFF;
   ++$count;
 }
 while($n != 0){
  $count++;
  $n = $n & ($n-1);
 }
 return $count;
}
//测试
$num=45;
echo $num."的二进制是".decbin($num)."<br/>";
echo $num."共有".NumberOf1($num)."个1";

运行结果:

php实现统计二进制中1的个数算法示例

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
Linux编译升级php的详细方法
Nov 04 PHP
保存到桌面、设为桌面且带图标的PHP代码
Nov 19 PHP
Yii中使用PHPExcel导出Excel的方法
Dec 26 PHP
php获取用户浏览器版本的方法
Jan 03 PHP
PHP文件读取功能的应用实例
May 08 PHP
PHP Web木马扫描器代码分享
Sep 06 PHP
php 如何禁用eval() 函数实例详解
Dec 01 PHP
PHP遍历目录文件的常用方法小结
Feb 03 PHP
PHP判断json格式是否正确的实现代码
Sep 20 PHP
PHP二维关联数组的遍历方式(实例讲解)
Oct 18 PHP
PHP添加PNG图片背景透明水印操作类定义与用法示例
Mar 12 PHP
php经典趣味算法实例代码
Jan 21 PHP
基于php中echo用逗号和用点号的区别详解
Jan 23 #PHP
php数据结构之顺序链表与链式线性表示例
Jan 22 #PHP
通过源码解析Laravel的依赖注入
Jan 22 #PHP
phpstorm 正则匹配删除空行、注释行(替换注释行为空行)
Jan 21 #PHP
php语言注释,单行注释和多行注释
Jan 21 #PHP
PHP注释语法规范与命名规范详解篇
Jan 21 #PHP
php nginx 实时输出的简单实现方法
Jan 21 #PHP
You might like
实用函数7
2007/11/08 PHP
PHP 7安装使用体验之性能大提升,兼容性强,扩展支持不够(升级PHP要谨慎)
2017/07/27 PHP
百度留言本js 大家可以参考下
2009/10/13 Javascript
JS 文件大小判断的实现代码
2010/04/07 Javascript
javascript动态添加、修改、删除对象的属性与方法详解
2014/01/27 Javascript
JavaScript实现基于十进制的四舍五入实例
2015/07/17 Javascript
javascript实现数组中的内容随机输出
2015/08/11 Javascript
浅析JavaScript 调试方法和技巧
2015/10/22 Javascript
Jquery日历插件制作简单日历
2015/10/28 Javascript
js操作DOM--添加、删除节点的简单实例
2016/07/08 Javascript
Node.js Sequelize如何实现数据库的读写分离
2016/10/23 Javascript
进阶之初探nodeJS
2017/01/24 NodeJs
js放到head中失效的原因与解决方法
2017/03/07 Javascript
BootStrap的两种模态框方式
2017/05/10 Javascript
基于zepto.js实现手机相册功能
2017/07/11 Javascript
js实现水平滚动菜单导航
2017/07/21 Javascript
Three.js利用顶点绘制立方体的方法详解
2017/09/27 Javascript
基于JavaScript实现抽奖系统
2018/01/16 Javascript
浅谈React高阶组件
2018/03/28 Javascript
浅谈Vue响应式(数组变异方法)
2018/05/07 Javascript
微信小程序工具函数封装
2019/10/28 Javascript
vue实现列表滚动的过渡动画
2020/06/29 Javascript
Vue 数据绑定的原理分析
2020/11/16 Javascript
python set集合使用方法解析
2019/11/05 Python
消防安全汇报材料
2014/02/08 职场文书
工程造价专业大学生职业规划范文
2014/03/09 职场文书
单位工程竣工验收方案
2014/03/16 职场文书
我的梦想演讲稿500字
2014/08/21 职场文书
大二学生学年自我鉴定
2014/09/12 职场文书
开业庆典活动策划方案
2014/09/21 职场文书
2014年招商工作总结
2014/11/22 职场文书
委托函范文
2015/01/29 职场文书
医务人员医德考评自我评价
2015/03/03 职场文书
2016年六一文艺汇演开幕词
2016/03/04 职场文书
golang中切片copy复制和等号复制的区别介绍
2021/04/27 Golang
Typescript类型系统FLOW静态检查基本规范
2022/05/25 Javascript