面试题10_二进制中1的个数

题目描述:

请实现一个函数,输入一个整数,输出该整数中二进制表示中1的个数。

例如,把9表示成二进制是1001,有2位是1。因此,若输入9,输出2。


解题思路:

思路1、右移输入的整数n,判断最右边是否是1,若是,则计数加一,直到n为0,

这种思路对于正整数可行,但是对于负数,则会进入死循环。因为,负数右移,最高位补1 而不是0

因此,这种方法不可取。


思路2、左移数字1,首先将n与1进行与运算,判断最后一位是不是1,之后,将1左移一位,判断n的倒数第二位是不是1,直到1左移32位,为0,结束循环。(注意:这个32位是 32为系统 整型数占用的位数)


代码实现:

int NumberOf1(int n)
{
	int flag = 1;
	static unsigned int count = 0;
	while(flag)
	{
		if(n & flag)
			count++;
		flag = flag << 1;
	}
	
	return count;
}

思路3、

另外一种思路:

规律:把一整数减去1,再和原整数做与运算,会把该整数最右边一个1变成0。

那么一个整数的二进制表示中有多少个1,就可以进行多少次这样的操作。


代码实现:

int NumberOf1(int n)
{
	static unsigned int count = 0;
	while(n)
	{
		count++;
		n = n&(n-1);
	}
	return count;
}



更多相关文章
  •     之前讨论过,在解决post跨域请求时,采用iframe+本域代理页的形式,兼容性(当然是包括IE6啦)是最好的.上次提到,代理页面的作用是:执行本域下的回调函数.就是这个原因,给XSS带来了便利.详细说明,请参考一个跨域请求的XSS漏洞     上次也提到,解决这个问题的根本在于杜绝不合法的 ...
  • MS15-035是Microsoft Graphics 组件处理增强型图元文件 (EMF) 的漏洞,可能允许远程执行代码. 通过补丁比对,可以看到主要是修补了一些可能存在整形溢出的位置,但是这些位置,我尝试了很多方法都无法执行到. 但是 int __thiscall MRSETDIBITSTODEV ...
  • 前些天用maven编译打包spark,搞得焦头烂额的,各种错误,层出不穷,想想也是醉了,于是乎,换种方式,使用sbt编译,看看人品如何! 首先,从官网spark官网下载spark源码包,解压出来.我这边使用的是1.4.0版本. 然后,我们需要把sbt配置好,配置很简单,无非就是SBT_HOME什么的 ...
  • 易网科技讯 8月24日消息,大唐电信科技股份有限公司今天公布的半年业绩显示,2012年上半年,大唐电信实现营业收入20.88亿元,与上年同期基本持平,净亏损3717.78万元,低于去年同期. 财报数据显示,大唐电信在今年上半年的主营业务毛利率比上年同期增加1.09个百分点,主营业务毛利总额比上年同期 ...
  • 在现在互联网盛行的时代,使得B/S架构飞速发展.曾经在大学的时候我一直都梦想着毕业后要找一个像腾讯这样大企业做C/S方面的开发工作(其实现在腾讯也有很多B/S软件),因为C/S体验度非常高,感觉非常好.但是此时此刻,我却没有这样的想法了.这是为什么呢?对于有经验的软件工程师都很清楚,B/S的程序部署 ...
  • 示例代码来自DoFactory.   概述 当你需要让对象返回之前的状态时,就使用备忘录模式.   意图 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将该对象恢复到原先保存的状态.   UML   图1 备忘录模式的UML图     参与者 这个模式涉及的 ...
一周排行
  • Linux策略路由基础   策略性是指对于IP包的路由是以网络管理员根据需要定下的一些策略为主要依据进行路由的.例如我们可以有这样的策略:“所有来直自网A的包,选择X路径:其他选择Y路径”,或者是“所有TOS为A的包 ...
  • 详细说明:注册页面进行用户名检验的页面,没有对输入进行过滤 漏洞证明:http://rma.h3c.com/spms_outter/base/CheckRegistedOrg.do?orgname=admin 返回 ...
  • 0xsec 很普通的一个任意下载文件漏洞.网站是某学校老师开发的,站点整体安全性很好,但忽略了对文件下载方式的处理,同时还暴露出了路径. 网站因此被突破.要是换在几年前,这套程序被用于某地区政府.公司企业以及学校等多 ...
  •   MySQL 分为Community Server 和 Enterprise Edition. 其中Community Server 可以直接从mysql 的官网下载.Enterprice Edition 只能从O ...
  •  在fortran中利用cpu_time子程序来测试代码运行时间 # 在fortran中利用cpu_time子程序来测试代码运行时间 program test_cpu_time real :: start, fini ...
  • 开始的代码,使用for循环来一个个监测是否被选中: function moveOption2(sourceSelect, destSelect){     var sourceOptions = sourceSele ...
  • 检查本地网络 首先,如果你的互联网连接彻底断开了,那么首先要检查的就是网络线缆的连接.这个建议看似废话,但是在实际工作中,我遇到过很多次网络问题,归根到底就是某个网络接口松动导致的. 通过Speedtest检查网络 ...
  • PHP编程中10个最常见的错误 PHP是一种非常流行的开源服务器端脚本语言,你在万维网看到的大多数网站都是使用php开发的.本篇经将为大家介绍PHP开发中10个最常见的问题,希望能够对朋友有所帮助. 错误1:fore ...
  • 现象,如标题,锁屏后WIFI会自动断开. 1.来到    设置-->无线和网络-->WLAN设置-->点击MENU(菜单)键-->高级-->WLAN休眠策略-->选择    永不休 ...
  • 据新华社电 财政部昨日发布消息,宣布财政补贴推广高效节能台式微型计算机活动将于10月1日启动,并明确推广产品范围.推广企业条件.推广期限.推广补贴标准等事项.日前,经国务院批准,财政部.国家发改委.工业和信息化部决定 ...