标题: 完成8位数据高低位交换只需三步的代码 [打印本页]
作者: LQMEI 时间: 2013-4-21 17:09
标题: 完成8位数据高低位交换只需三步的代码
蝶式交换法代码:
unsigned char shift_fun2(unsigned char data)
{
data=(data<<4)|(data>>4);
data=((data<<2)&0xcc)|((data>>2)&0x33);
data=((data<<1)&0xaa)|((data>>1)&0x55);
return data;
}
在遇到交换字节位的问题时使用蝶式交换法和查表法来实现。查表法顾名思义即将一些值存到内存中
需要计算时查表即可但是也会占用额外的存储空间。这里主要介绍一下蝶式交换法
设原始位为 1234 5678
data=(data<<4)|(data>>4); 之后位序为 5678 1234
data=((data<<2)&0xcc)|((data>>2)&0x33); 之后位序为 7856 3412
data=((data<<1)&0xaa)|((data>>1)&0x55); 之后位序为 8765 4321
由此完成了整个位的逆序转换
[此贴子已经被作者于2013-4-21 17:09:46编辑过]
作者: ahshmj 时间: 2013-4-22 13:12
........
[此贴子已经被作者于2013-4-22 13:14:11编辑过]
作者: lizhendong 时间: 2017-11-15 21:14
太好了,正要找的,谢谢了
作者: sinxcosx 时间: 2018-1-13 11:17
代码少,难看明白的代码还是少用好
作者: hk0506 时间: 2018-8-6 15:07
来来 给你解释一下
设原始位为 1234 5678
data=(data<<4)|(data>>4); //data<<4,数据左移4位,5678 000;data>>4,数据右移4位,0000 1234;|按位或 , 之后位序为 5678 1234
data=((data<<2)&0xcc)|((data>>2)&0x33); 5678 1234 data<<2左移2位,7812 3400;&按位与1100 1100,得7800 3400;data>>2,右移两位,0056 7812,位与0011 0011,得0056 0012;位或之后位序为 7856 3412
data=((data<<1)&0xaa)|((data>>1)&0x55); 7856 3412左移一位8563 4120,位与1010 1010得8060 4020;右移一位 0785 6341,位与0101 0101得0705 0301,;位或之后位序为 8765 4321
作者: JK_L 时间: 2021-8-4 14:25
这里,有data的作用域问题,
作者: iClass263 时间: 2021-12-5 20:27
阿这...学到了,牛
作者: li64331218 时间: 2023-3-20 12:56
傅里叶算法可以用到
作者: xuxiaojian 时间: 2023-3-23 20:36
太牛了吧
作者: 指北针 时间: 2024-5-28 18:01
这是咋想出来的?
作者: liuzx66 时间: 2024-5-29 13:17



作者: nearsea 时间: 2024-6-10 16:53
有没有算过能传统两字节左移右移快多少?
作者: 电子辉 时间: 2024-9-11 16:55
为什么不用结构+联合,想换都行,何必搞这么复杂
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |