二进制中1的个数
来源:互联网 发布:2016淘宝官方活动 编辑:程序博客网 时间:2024/06/18 08:41
题目:请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。例如:把9表示成二进制1001,有2位是1。因此,如果输入9,该函数输出2。
解法1:以9为例,9的二进制表示为1001,可将9与1进行与运算即1001&0001,得到结果为1,表示末尾为1。然后,将1001右移一位,得到0100,在与0001与运算,得到0,表示末尾为0。最终过程为:将输入数与1进行与运算,如果结果为1,则该数的二进制表示中1的个数加一,然后将该数右移一位,直到该数变为0。
function numberOf1($num){$count = 0;while($num!=0){if($num & 1 == 1)$count++;$num = $num >> 1;}return $count;}
该算法只适用正数。因为,如果是负数,右移时最高位会用1填充,就会导致死循环。
解法2:将解法1进行改进,将整数不与1进行与运算,而改为与一个标识flag进行与运算,每次与运算一次后,将flag左移一位,直到flag变为0.
function numberOf1($num){$count = 0;$flag = 1;while($flag){if($num & $flag )$count++;$flag = $flag << 1;}return $count;}
解法3:利用n&(n-1)求解。每次计算n = n & (n-1)后,n最后一位1就会去掉。如9&8得到8,二进制表示为1001&1000=1000;然后8&7=0,二进制表示为1000&0111=0000。当结果为0时,就是结束条件。
function numberOf1($num){$count = 0;while ($num) {$num = $num & ($num-1);$count++;}return $count;}
0 0
- 二进制中1的个数
- 二进制中1的个数
- 二进制中1的个数
- 二进制中1的个数
- 二进制中1的个数
- 二进制中1的个数
- 二进制中1的个数
- 二进制中1的个数
- 二进制中1的个数
- 二进制中1的个数
- 二进制中1的个数
- 二进制中1的个数
- 二进制中1的个数
- 二进制中1的个数
- 二进制中1的个数
- 二进制中1的个数
- 二进制中1的个数
- 二进制中1的个数
- 不做低头族,春节来为父母做九件事!
- 关于多文档MFC从xp系统上移植到win7上出现错误的问题解决经验
- JDK的彻底删除
- HTTPS站点搭建教程:Win7/Windows Server 2008R2
- JQuery选择器
- 二进制中1的个数
- 欢迎使用CSDN-markdown编辑器
- 使用Spring-Security进行登录控制的session问题
- 推荐系统个人理解(理论部分)
- Android开发优化之——使用软引用和弱引用
- Android5.0适配——水波纹点击效果
- WeakReference
- Quartz与Spring的整合-Quartz中的job如何自动注入spring容器托管的对象
- Java动态读取map里面的key值