找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 13956|回复: 12
收起左侧

完成8位数据高低位交换只需三步的代码

  [复制链接]
ID:23515 发表于 2013-4-21 17:09 | 显示全部楼层 |阅读模式

蝶式交换法代码:

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编辑过]
回复

使用道具 举报

ID:296837 发表于 2018-8-6 15:07 | 显示全部楼层
sinxcosx 发表于 2018-1-13 11:17
代码少,难看明白的代码还是少用好

来来  给你解释一下
设原始位为 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

评分

参与人数 1黑币 +80 收起 理由
admin + 80 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:7485 发表于 2013-4-22 13:12 | 显示全部楼层

........

[此贴子已经被作者于2013-4-22 13:14:11编辑过]
回复

使用道具 举报

ID:138443 发表于 2017-11-15 21:14 | 显示全部楼层
太好了,正要找的,谢谢了
回复

使用道具 举报

ID:275494 发表于 2018-1-13 11:17 来自手机 | 显示全部楼层
代码少,难看明白的代码还是少用好
回复

使用道具 举报

ID:262352 发表于 2021-8-4 14:25 | 显示全部楼层
hk0506 发表于 2018-8-6 15:07
来来  给你解释一下
设原始位为 1234  5678
data=(data4);  //data4,数据右移4位,0000 1234;|按位或  ...

这里,有data的作用域问题,
回复

使用道具 举报

ID:981889 发表于 2021-12-5 20:27 来自手机 | 显示全部楼层
阿这...学到了,牛
回复

使用道具 举报

ID:291668 发表于 2023-3-20 12:56 | 显示全部楼层
傅里叶算法可以用到
回复

使用道具 举报

ID:1029096 发表于 2023-3-23 20:36 | 显示全部楼层
hk0506 发表于 2018-8-6 15:07
来来  给你解释一下
设原始位为 1234  5678
data=(data4);  //data4,数据右移4位,0000 1234;|按位或  ...

太牛了吧
回复

使用道具 举报

ID:373976 发表于 2024-5-28 18:01 | 显示全部楼层
这是咋想出来的?
回复

使用道具 举报

ID:160500 发表于 2024-5-29 13:17 | 显示全部楼层
回复

使用道具 举报

ID:1101997 发表于 2024-6-10 16:53 来自手机 | 显示全部楼层
有没有算过能传统两字节左移右移快多少?
回复

使用道具 举报

ID:561623 发表于 2024-9-11 16:55 | 显示全部楼层
为什么不用结构+联合,想换都行,何必搞这么复杂
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表