| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 437 人关注过本帖
标题:没事瞎想 :关于申请数组元素不固定的一个想法
只看楼主 加入收藏
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
结帖率:99.76%
收藏
已结贴  问题点数:20 回复次数:9 
没事瞎想 :关于申请数组元素不固定的一个想法
刚刚写了一段小程序   利用位运算来计算一个数字的二进制中包含的1的个数的

写完之后  突然想把这些1 都位于哪个位上  也返回给函数调用者

但是由于1的个数不固定  所以申请空间 不知道咋弄比较好

比如  (10)153=(2)10011001  返回1的个数是4 返回位置分别是  左1 左4 左5 左8
搜索更多相关主题的帖子: 二进制 元素 空间 
2013-12-18 10:35
pangshch
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:2
帖 子:443
专家分:1966
注 册:2013-4-9
收藏
得分:10 
C++在可变长数组方面好像很方便, string类好像也有这方面功能,就是每读到1就分配一个内存, 我不是很熟悉,错了可以指出来.
最直接最复杂的就是用链表了.
2013-12-18 10:43
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:10 
1的个数不固定
但1的最大个数是一定的
2013-12-18 11:15
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
以下是引用rjsp在2013-12-18 11:15:33的发言:

1的个数不固定
但1的最大个数是一定的
恩,以dword类型为准  我的电脑应该是31个1

那设置60多个长度应该就够了

DO IT YOURSELF !
2013-12-18 11:25
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:0 
dword类型最多应该是32个1吧

我觉得你这个想法最大的问题是,从你的函数结果类型中取出结果,并不比直接从二进制数据中取出结果来得快。
也就是说,你换了一种二进制表示形式,但不如原始二进制表示形式来得高效。

想找1的位置,有汇编指令bsf,比如VC中对应的是_BitScanForward
2013-12-18 11:50
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
code blocks  不支持内联汇编   无法测试了

DO IT YOURSELF !
2013-12-18 13:31
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:0 
Code::Blocks只是个IDE,而不是编译器。基本上所有的C/C++编译器都支持内嵌汇编
比如 VC 的 __asm xxxx。intel汇编格式
比如 GCC 的 __asm__( "xxxx" )。AT&T汇编格式

另外,这些常用的汇编指令在各个库中都扩展支持了,不需要内嵌汇编,比如gcc的 http://rchardx.
vc的在<intrin.h>中
2013-12-18 14:12
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
看了一下   bsf bsr 系列指令 均只是扫描第一个1  扫到或扫不到  并不继续下一个1的扫描

DO IT YOURSELF !
2013-12-18 14:20
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:0 
找到后,将那个bit置0
a &= ~(1<<n)
或者
a ^= (1<<n)
2013-12-18 14:33
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
终于弄出来了  代码写的太乱了  就不贴了  贴一下结果吧

程序代码:

 1的二进制里面有1个1  分别位于 D[0]

 2的二进制里面有1个1  分别位于 D[1]

 3的二进制里面有2个1  分别位于 D[0]  D[1]

 4的二进制里面有1个1  分别位于 D[2]

 5的二进制里面有2个1  分别位于 D[0]  D[2]

 6的二进制里面有2个1  分别位于 D[1]  D[2]

 7的二进制里面有3个1  分别位于 D[0]  D[1]  D[2]

 8的二进制里面有1个1  分别位于 D[3]

 9的二进制里面有2个1  分别位于 D[0]  D[3]
10的二进制里面有2个1  分别位于 D[1]  D[3]
11的二进制里面有3个1  分别位于 D[0]  D[1]  D[3]
12的二进制里面有2个1  分别位于 D[2]  D[3]
13的二进制里面有3个1  分别位于 D[0]  D[2]  D[3]
14的二进制里面有3个1  分别位于 D[1]  D[2]  D[3]
15的二进制里面有4个1  分别位于 D[0]  D[1]  D[2]  D[3]
16的二进制里面有1个1  分别位于 D[4]
17的二进制里面有2个1  分别位于 D[0]  D[4]
18的二进制里面有2个1  分别位于 D[1]  D[4]
19的二进制里面有3个1  分别位于 D[0]  D[1]  D[4]
20的二进制里面有2个1  分别位于 D[2]  D[4]
21的二进制里面有3个1  分别位于 D[0]  D[2]  D[4]
22的二进制里面有3个1  分别位于 D[1]  D[2]  D[4]
23的二进制里面有4个1  分别位于 D[0]  D[1]  D[2]  D[4]
24的二进制里面有2个1  分别位于 D[3]  D[4]
25的二进制里面有3个1  分别位于 D[0]  D[3]  D[4]
26的二进制里面有3个1  分别位于 D[1]  D[3]  D[4]
27的二进制里面有4个1  分别位于 D[0]  D[1]  D[3]  D[4]
28的二进制里面有3个1  分别位于 D[2]  D[3]  D[4]
29的二进制里面有4个1  分别位于 D[0]  D[2]  D[3]  D[4]
30的二进制里面有4个1  分别位于 D[1]  D[2]  D[3]  D[4]
31的二进制里面有5个1  分别位于 D[0]  D[1]  D[2]  D[3]  D[4]
32的二进制里面有1个1  分别位于 D[5]
33的二进制里面有2个1  分别位于 D[0]  D[5]
34的二进制里面有2个1  分别位于 D[1]  D[5]
35的二进制里面有3个1  分别位于 D[0]  D[1]  D[5]
36的二进制里面有2个1  分别位于 D[2]  D[5]
37的二进制里面有3个1  分别位于 D[0]  D[2]  D[5]
38的二进制里面有3个1  分别位于 D[1]  D[2]  D[5]
39的二进制里面有4个1  分别位于 D[0]  D[1]  D[2]  D[5]
40的二进制里面有2个1  分别位于 D[3]  D[5]
41的二进制里面有3个1  分别位于 D[0]  D[3]  D[5]
42的二进制里面有3个1  分别位于 D[1]  D[3]  D[5]
43的二进制里面有4个1  分别位于 D[0]  D[1]  D[3]  D[5]
44的二进制里面有3个1  分别位于 D[2]  D[3]  D[5]
45的二进制里面有4个1  分别位于 D[0]  D[2]  D[3]  D[5]
46的二进制里面有4个1  分别位于 D[1]  D[2]  D[3]  D[5]
47的二进制里面有5个1  分别位于 D[0]  D[1]  D[2]  D[3]  D[5]
48的二进制里面有2个1  分别位于 D[4]  D[5]
49的二进制里面有3个1  分别位于 D[0]  D[4]  D[5]

DO IT YOURSELF !
2013-12-18 14:55
快速回复:没事瞎想 :关于申请数组元素不固定的一个想法
数据加载中...
 
   



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

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