标题:[求助]请问怎么实现8位数据对称反转。例:10100000b变为0000101b
只看楼主
Xuan
Rank: 1
等 级:新手上路
帖 子:79
专家分:0
注 册:2007-4-1
 问题点数:0 回复次数:5 
[求助]请问怎么实现8位数据对称反转。例:10100000b变为0000101b
我是初学C++的,哪位帮我实现下这个啊。谢谢了,是用堆栈吗
搜索更多相关主题的帖子: 数据 反转 
2007-11-08 21:09
succubus
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:635
专家分:1080
注 册:2007-10-7
得分:0 
unsigned char revBitsInByte(unsigned char x)
{
x = (x & 0x55) << 1 | (x & 0xAA) >> 1;
x = (x & 0x33) << 2 | (x & 0xCC) >> 2;
x = (x & 0x0F) << 4 | (x & 0xF0) >> 4;
return x;
}

[url=http:///view/aDU1]/image/aDU1.gif" border="0" />[/url]
2007-11-08 22:10
dreamhunter
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2006-10-18
得分:0 
楼上的代码不是很看得懂,能解释一下么?谢谢了

2007-11-09 17:16
succubus
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:635
专家分:1080
注 册:2007-10-7
得分:0 

开始x(ai(0<=i<8)代表x中的一位): a7 a6 a5 a4 a3 a2 a1 a0

x & 0x55即x & 01010101b后: 0 a6 0 a4 0 a2 0 a0
(x & 0x55) << 1后: a6 0 a4 0 a2 0 a0 0

x & 0xAA即x & 10101010b后: a7 0 a5 0 a3 0 a1 0
(x & 0xAA) >> 1后: 0 a7 0 a5 0 a3 0 a1

(x & 0x55) << 1 | (x & 0xAA) >> 1后 a6 a7 a4 a5 a2 a3 a0 a1

x = (x & 0x55) << 1 | (x & 0xAA) >> 1;后x变成a6 a7 a4 a5 a2 a3 a0 a1
之后同理

x = (x & 0x33) << 2 | (x & 0xCC) >> 2;后x变成a4 a5 a6 a7 a0 a1 a2 a3
x = (x & 0x0F) << 4 | (x & 0xF0) >> 4;后x变成a0 a1 a2 a3 a4 a5 a6 a7

反转完毕


[url=http:///view/aDU1]/image/aDU1.gif" border="0" />[/url]
2007-11-09 22:15
csmenglei951
Rank: 1
等 级:新手上路
威 望:1
帖 子:77
专家分:0
注 册:2007-9-30
得分:0 

用递归然后回溯也行

2007-11-09 22:32
dicky3651
Rank: 1
等 级:新手上路
帖 子:40
专家分:0
注 册:2006-9-27
得分:0 
以下是引用succubus在2007-11-8 22:10:35的发言:
unsigned char revBitsInByte(unsigned char x)
{
x = (x & 0x55) << 1 | (x & 0xAA) >> 1;
x = (x & 0x33) << 2 | (x & 0xCC) >> 2;
x = (x & 0x0F) << 4 | (x & 0xF0) >> 4;
return x;
}

好算法,用位与方式,比用递归好,虽然效果一样,但是如果讲及算法效率的话,这种比递归高很多


又要学LINUX内核,又要学SDK,仲要本本书都砖头咁厚,简直是拿我的命
2007-11-09 23:01



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-184632-1-1.html




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

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