| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2985 人关注过本帖
标题:[讨论]统计二进制中1的个数
只看楼主 加入收藏
xiao_2008
Rank: 1
等 级:新手上路
帖 子:103
专家分:0
注 册:2006-4-22
收藏
 问题点数:0 回复次数:21 
[讨论]统计二进制中1的个数
昨天在武汉理工大学参加了校园招聘笔试题目,
编程第一题:
给定任意一个整数的二进制的形式,统计其中1的个数
希望大家编写各自的算法谢谢
搜索更多相关主题的帖子: 二进制 统计 
2007-11-05 10:24
万兽无缰
Rank: 1
等 级:新手上路
威 望:1
帖 子:296
专家分:0
注 册:2007-8-27
收藏
得分:0 

如何输入二进制?
还是在程序中输入十进制转为二进制再判断?
这是问题的关键,程序不难


女朋友问我想怎么死~~~
             我说我想"爽死"
2007-11-05 11:08
静思
Rank: 3Rank: 3
来 自:沈阳
等 级:新手上路
威 望:8
帖 子:630
专家分:0
注 册:2006-2-28
收藏
得分:0 

/*计算整数number的比特位值为1的位数*/
int getBits(int number)
{
int sum= 0;

for( ; number; number&= number-1)
sum++;
return sum++;
}
关键是:number &=(number-1)
1):number 为奇数,则number&=(number - 1)提取末尾1,并将结果赋给number。计数器显然要加1。
2):number 为偶数,则number&=(number - 1)number最末尾的1置成0,其余不变,并将结果赋给number。若此时number不为0,则说明仍可继续,由于已经将number最末尾的1置成0,因此,计数器也要加1。

详见《高效程序的奥秘》。

[此贴子已经被作者于2007-11-5 11:22:13编辑过]


英者自知,雄者自胜
2007-11-05 11:19
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 

本来想着用移位的,但后来想象,如果是字符串那直接就可以判断了.


倚天照海花无数,流水高山心自知。
2007-11-05 11:27
永夜的极光
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:2721
专家分:1
注 册:2007-10-9
收藏
得分:0 
以下是引用静思在2007-11-5 11:19:34的发言:

/*计算整数number的比特位值为1的位数*/
int getBits(int number)
{
int sum= 0;

for( ; number; number&= number-1)
sum++;
return sum++;
}
关键是:number &=(number-1)
1):number 为奇数,则number&=(number - 1)提取末尾1,并将结果赋给number。计数器显然要加1。
2):number 为偶数,则number&=(number - 1)number最末尾的1置成0,其余不变,并将结果赋给number。若此时number不为0,则说明仍可继续,由于已经将number最末尾的1置成0,因此,计数器也要加1。

详见《高效程序的奥秘》。


好!!

请问有没有这本书的电子版的,最好是中文的


从BFS(Breadth First Study)到DFS(Depth First Study)
2007-11-05 12:58
静思
Rank: 3Rank: 3
来 自:沈阳
等 级:新手上路
威 望:8
帖 子:630
专家分:0
注 册:2006-2-28
收藏
得分:0 
回复:(永夜的极光)以下是引用静思在2007-11-5 11:1...
电子版我找不着,我在当当网上花了20元钱买了一本,中文版的

英者自知,雄者自胜
2007-11-05 13:10
永夜的极光
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:2721
专家分:1
注 册:2007-10-9
收藏
得分:0 
我在网上也只找到这个书的介绍,看起来很不错的书,我也去买本收藏起来

从BFS(Breadth First Study)到DFS(Depth First Study)
2007-11-05 13:35
xiao_2008
Rank: 1
等 级:新手上路
帖 子:103
专家分:0
注 册:2006-4-22
收藏
得分:0 

谢谢各位


看动画片
2007-11-05 15:55
叶柄
Rank: 1
等 级:新手上路
帖 子:60
专家分:0
注 册:2007-10-17
收藏
得分:0 
我觉得用 & 和 << 实现 好些
比如
10111110101010101010101
&
00000000000000000000001
取出第一位
然后
左移
再和原数 & 取出第二位
依次到最高位

&得结果只有 0 和 1 两中 设置个计数器 就可以了

我觉得主要是思路 所以 程序代码 就留给你自己了 呵呵
2007-11-05 18:12
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 

呵呵,知道为什么还是不能用移位吗,
因为它本身只是看起来是二进制,
但在编程的过程中它们是数字(十进制)或者是字符串.


倚天照海花无数,流水高山心自知。
2007-11-05 18:42
快速回复:[讨论]统计二进制中1的个数
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.011689 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved