剑指OFFER-二进制中1的个数
来源:互联网 发布:最新熊片数据库 编辑:程序博客网 时间:2024/05/17 03:09
题目
输入一个整数,输出该数二进制表示中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;}
阅读全文
1 0
- 剑指offer:二进制中1的个数
- 剑指offer:二进制中1的个数
- 【剑指offer】二进制中1的个数
- [剑指Offer]二进制中1的个数
- 【剑指offer】二进制中1的个数
- 剑指offer--二进制中1的个数
- 剑指offer:二进制中1的个数
- 剑指offer 二进制中1的个数
- 剑指offer 二进制中1的个数
- 《剑指offer》二进制中1的个数
- 剑指 offer:二进制中1的个数
- 剑指offer-二进制中1的个数
- 剑指offer 二进制中1的个数
- 剑指offer-二进制中1的个数
- 剑指offer 二进制中1的个数
- [剑指offer]二进制中1的个数
- 《剑指offer》-二进制中1的个数
- 剑指offer|二进制中1的个数
- ISO27001LA国际信息安全管理主任审核员(IRCA)认证
- Centos7 mysql-5.6.30-linux-glibc2.5-x86_64.tar.gz 安装
- .Net MVC4 发布后页面样式问题
- Google算法题:E-之字形遍历(zigzga)
- EXTJS框架中的日期控件在浏览器中的布满全屏问题的解决方案
- 剑指OFFER-二进制中1的个数
- 双指针扫描 / 尺取法
- imageloader帮助类
- 猴子摘桃--最长递增子串
- 使用AndroidImageSlider实现轮播
- 记录使用javascript中的一些坑
- Linux 常用命令
- 二叉树的四种遍历方式 (前序,中序,后序,层序遍历 python实现)
- Matlab直线最小二乘拟合实现