发新帖我要提问
12
返回列表
打印

C语言实现高低位镜像用什么方法比较简单?

[复制链接]
楼主: icmap
手机看帖
扫描二维码
随时随地手机跟帖
21
woshidasha| | 2009-12-7 14:23 | 只看该作者 回帖奖励 |倒序浏览
我x,不至于吧,这么麻烦!!!

unsigned char mirrored(unsigned char a)
{
unsigned char temp;
temp=(a&0xf0);
temp=temp<<4;
temp|=a>>4;
return temp;
}

使用特权

评论回复
22
airwill| | 2009-12-7 14:29 | 只看该作者
要是 cortex M3 , 有 rbit 指令, 单指令直接完成

使用特权

评论回复
23
icmap|  楼主 | 2009-12-7 14:47 | 只看该作者
感谢大家的回复,好方法真多,尤其是 11 楼 ZALIN 的方法,很巧妙很高效。

Cortex M3 有 rbit 指令那真太好了,airwill 有没有在 C 中使用这条指令的的好的建议?是嵌入汇编好,还是调用汇编子程序好?

使用特权

评论回复
24
icmap|  楼主 | 2009-12-7 15:05 | 只看该作者
老X,我看了 Hotpower 的“C51 红杏出墙”,说的是在C51中嵌入51汇编。

在性能差不多的情况下,我还是希望提高可移植性。如果汇编指令中直接就有一条“镜像(逆序)”指令,在性能要求苛刻的情况下就可以牺牲一下可移植性。

使用特权

评论回复
25
谈的元| | 2009-12-7 21:09 | 只看该作者
记号

使用特权

评论回复
26
不亦心| | 2009-12-7 21:16 | 只看该作者
没有带进位移动的库函数嘛??

使用特权

评论回复
27
gyjdk0601| | 2009-12-7 22:59 | 只看该作者
学习了

使用特权

评论回复
28
QuakeGod| | 2009-12-20 02:20 | 只看该作者
本帖最后由 QuakeGod 于 2009-12-20 02:21 编辑

这个
A = ((A & 0xaa) >> 1) | ((A & 0x55) << 1);
A = ((A & 0xcc) >> 2) | ((A & 0x33) << 2);
A = ((A & 0xf0) >> 4) | ((A & 0x0f) << 4);
不是省时间的,貌似程序很简单,但是一般单片机每次只能移动一位,所以总共要进行14次移位,若干次数据传输,9次逻辑运算。程序空间也要占用几十个字节了。
半字节查表应该是性价比最好的办法。只占用16个字节的表空间,压缩一下甚至只占用8个字节。
当然了,借助51的半字节操作,性能更好。

使用特权

评论回复
29
40560335| | 2016-3-1 10:34 | 只看该作者
ZALIN 发表于 2009-12-7 03:50
除了使用查表,更通用的还是蝶型变换吧

// 反转字节

这办法好巧妙,收藏了。。。:handshake

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则