| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 752 人关注过本帖
标题:一段费解的代码
只看楼主 加入收藏
sav7
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2007-12-18
收藏
 问题点数:0 回复次数:5 
一段费解的代码
初学者,近日读代码学习
这段代码有点看不懂,希望高手赐教

void ByteToBit(bool *Out, const char *In, int bits)
{
    for(int i=0; i<bits; ++i)
        Out[i] = (In[i>>3]>>(i&7)) & 1;
}
搜索更多相关主题的帖子: 代码 
2007-12-18 15:11
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
嗯……勉强看懂了,但是这个代码将Byte转换成Bit方向是反的。比如二进制0000 0101转换出来是1,0,1,0,0……
下面是我改过的代码
void ByteToBit(bool *Out, const char *In, int bits) {
    for (int i=0; i<bits; ++i)
        Out[i] = (In[i>>3]>>(7-i&7)) & 1;
}
i&7相当于i%8,i>>3相当于i/8,剩下的都很好理解了咯~~~

专心编程………
飞燕算法初级群:3996098
我的Blog
2007-12-18 18:45
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
不过我多一句嘴。原来的代码在Little ending的机器上的结果是对的,而我的代码则是在Bigger ending的机器上才会有正确的结果。换句话说这代码不跨平台的。要得到怎样的结果可以自己选择。

专心编程………
飞燕算法初级群:3996098
我的Blog
2007-12-18 18:47
sav7
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2007-12-18
收藏
得分:0 
谢谢
最后的 & 1是干嘛用的呢
呵呵
新人,不太懂
2007-12-20 10:33
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
& 1是只取一位的意思,这样out的值就是表达式最后一个bit的值,起到了Byte转Bit的作用

专心编程………
飞燕算法初级群:3996098
我的Blog
2007-12-20 14:50
sav7
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2007-12-18
收藏
得分:0 
看懂了
非常谢谢啦
2007-12-21 10:21
快速回复:一段费解的代码
数据加载中...
 
   



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

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